├── sub
├── change-model-name.md
├── redirect.md
├── add-search.md
├── easiest-way.md
├── add-sort.md
├── user-resource-sample.md
└── add-custom-page.md
└── README.md
/sub/change-model-name.md:
--------------------------------------------------------------------------------
1 | # 表示されているモデル名を好きな名前に変えたい
2 | 初期の状態では左のメニューバーやモデル一覧画面のタイトルにはLaravelで作成したモデルのファイル名の表示がされてます
3 | 例:app/Models/Post.php → 表示名:Post
4 | これを「ブログ記事」のように変えたい場合の修正箇所は下記になります
5 |
6 | ```vim
7 | app/Filament/Resources/PostResource.php
8 | ---before---
9 | class PostResource extends Resource
10 | {
11 | protected static ?string $model = Post::class;
12 |
13 | protected static ?string $navigationIcon = 'heroicon-o-collection';
14 |
15 | public static function form(Form $form): Form
16 | ------------
17 | ↓
18 | ---after---
19 | class PostResource extends Resource
20 | {
21 | protected static ?string $model = Post::class;
22 |
23 | protected static ?string $navigationIcon = 'heroicon-o-collection';
24 |
25 | protected static ?string $modelLabel = 'ブログ記事'; //ここを追加
26 |
27 | public static function form(Form $form): Form
28 |
29 | -----------
30 | ```
31 |
32 | 修正後は下記のような感じで表示されます:
33 |
34 | ### before
35 |
36 |
37 | ### after
38 |
39 |
40 | あら便利💕
41 |
42 | 詳しくはオフィシャルドキュメントを参照👉 [Model Labels - Filament](https://filamentphp.com/docs/2.x/admin/resources/getting-started#model-labels)
43 |
--------------------------------------------------------------------------------
/sub/redirect.md:
--------------------------------------------------------------------------------
1 | # データ作成/更新時にリダイレクト先を変えたい
2 | 該当のファイルに作成時や更新時のリダイレクトURLを指定することで動作を変更できます
3 | ここではPostモデルの例を記載します
4 | 他のモデルの時は
5 | `app/Filament/Resources/(モデル名)Resource/`
6 | にファイルパスを置き換えたファイルを変更してください
7 |
8 | ## データ作成時のリダイレクト先変更方法
9 | ```vim
10 | app/Filament/Resources/PostResource/Pages/CreatePost.php
11 | ---before---
12 | class CreatePost extends CreateRecord
13 | {
14 | protected static string $resource = PostResource::class;
15 | }
16 | ------------
17 | ↓
18 | ---after---
19 | class CreatePost extends CreateRecord
20 | {
21 | protected static string $resource = PostResource::class;
22 |
23 | // ここを追加します
24 | protected function getRedirectUrl(): string
25 | {
26 | return $this->getResource()::getUrl('index');
27 | }
28 | }
29 | -----------
30 | ```
31 |
32 | ## データ更新時のリダイレクト先変更方法
33 | ```vim
34 | app/Filament/Resources/PostResource/Pages/EditPost.php
35 | ---before---
36 | class EditPost extends EditRecord
37 | {
38 | protected static string $resource = PostResource::class;
39 |
40 | protected function getActions(): array
41 | {
42 | return [
43 | Actions\DeleteAction::make(),
44 | ];
45 | }
46 | }
47 | ------------
48 | ↓
49 | ---after---
50 | class EditPost extends EditRecord
51 | {
52 | protected static string $resource = PostResource::class;
53 |
54 | protected function getActions(): array
55 | {
56 | return [
57 | Actions\DeleteAction::make(),
58 | ];
59 | }
60 |
61 | protected function getRedirectUrl(): string
62 | {
63 | return $this->getResource()::getUrl('index');
64 | }
65 | }
66 | -----------
67 | ```
68 |
69 | より詳しい情報はオフィシャルドキュメントを読もう👉
70 | [Customizing form redirects - Filament](https://filamentphp.com/docs/2.x/admin/resources/creating-records#customizing-form-redirects)
--------------------------------------------------------------------------------
/sub/add-search.md:
--------------------------------------------------------------------------------
1 | # 検索機能の追加
2 |
3 | 管理画面で登録データの項目データを検索したい場合、Filamentでは手軽に機能を追加することができます
4 |
5 | ```vim
6 | app/Filament/Resources/PostResource.php
7 | ---before---
8 | public static function table(Table $table): Table
9 | {
10 | return $table
11 | ->columns([
12 | Tables\Columns\TextColumn::make('title')->label('タイトル'),
13 | Tables\Columns\TextColumn::make('body')->label('本文'),
14 | ])
15 | ------------
16 | ↓
17 | ---after---
18 | public static function table(Table $table): Table
19 | {
20 | return $table
21 | ->columns([
22 | Tables\Columns\TextColumn::make('title')->label('タイトル')->searchable(), //ここにsearchableを追加
23 | Tables\Columns\TextColumn::make('body')->label('本文')->searchable(), //ここにsearchableを追加
24 | ])
25 | -----------
26 | ```
27 |
28 | ## before
29 |
30 |
31 | ## after
32 |
33 |
34 | ## ソートと併用可能
35 | 検索対象に加えて[こちらのページ](/sub/add-sort.md)に記載したソート機能も下記の様にsortableを付け加えるだけでソート対象にすることも可能
36 |
37 | ```vim
38 | app/Filament/Resources/PostResource.php
39 | ---before---
40 | public static function table(Table $table): Table
41 | {
42 | return $table
43 | ->columns([
44 | Tables\Columns\TextColumn::make('title')->label('タイトル')->searchable(),
45 | Tables\Columns\TextColumn::make('body')->label('本文')->searchable(),
46 | ])
47 | ------------
48 | ↓
49 | ---after---
50 | public static function table(Table $table): Table
51 | {
52 | return $table
53 | ->columns([
54 | Tables\Columns\TextColumn::make('title')->label('タイトル') //見やすくするため改行追加
55 | ->searchable()->sortable(), //ここにsortableを追加
56 | Tables\Columns\TextColumn::make('body')->label('本文') //見やすくするため改行追加
57 | ->searchable()->sortable(), //ここにsortableを追加
58 | ])
59 | -----------
60 | ```
61 |
62 |
63 | あら便利💕
64 |
65 | 詳しくはオフィシャルドキュメントを参照👉 [Columns - Table Builder - Filament](https://filamentphp.com/docs/2.x/tables/columns#searching)
66 |
--------------------------------------------------------------------------------
/sub/easiest-way.md:
--------------------------------------------------------------------------------
1 | # 凄く楽する方法
2 | Filamentのリソース作成時には自動生成オプションが用意されています[(オフィシャルドキュメントへのリンク)](https://filamentphp.com/docs/2.x/admin/resources/getting-started#automatically-generating-forms-and-tables)
3 | この方法を使うとモデルの持つ項目を基に一覧画面の表示部分やCRUD(作成、表示、更新、削除)機能画面を自動生成してくれます👍
4 |
5 | ## やり方
6 |
7 | ここでは[トップページ](/README.md)の**Postモデルのファイルを作成し、マイグレーションを実施した直後の前提**で話を進めます
8 |
9 | ### 必要なパッケージのインストール
10 |
11 | 自動生成には `doctrine/dbal` パッケージが必要なので事前にインストールします
12 |
13 | ```sh
14 | composer require doctrine/dbal
15 | ```
16 |
17 | ### モデルを基にしたリソースの自動生成コマンド
18 |
19 | 次のコマンドでPostモデルを対象としてFilamentのリソースを自動生成させます
20 |
21 | ```sh
22 | php artisan make:filament-resource Post --generate
23 | ```
24 |
25 | ## 管理画面にアクセスして動作確認
26 |
27 | 管理画面にアクセスすると次のような状態になっています
28 |
29 |
30 | New Post(作成)をクリックすると次のような新規データ作成画面に(テキストはダミーです)
31 |
32 |
33 | 保存してPostデータ一覧に戻るとデータが追加されています
34 |
35 |
36 | 何これめっちゃ楽🤯💕
37 | なお、自動生成されたファイルは`app/Filament/Resources/`配下に保存されているので、更にカスタマイズが必要な場合にはそれらのファイルを弄ることで好き勝手に出来ます👍
38 |
39 | ## Userモデルの場合
40 |
41 | ユーザモデルでも自動生成が使えますが、ユーザ情報更新の際のパスワードのような部分はdehydrate処理を使わないと上手くいかないので、[詳しくはこちらの説明](/sub/user-resource-sample.md)を参照してください
42 |
43 | ### Userリソース作成
44 |
45 | ```sh
46 | php artisan make:filament-resource User --generate
47 | ```
48 |
49 | ### Userリソース管理画面サンプル画像
50 |
51 |
52 |
53 | Editをクリック後の画面
54 |
55 |
56 | 上記のまま"Save Changes"をクリックするとPasswordが必須項目と警告が出る(正しくないというか、好ましくない動作)
57 |
58 |
59 | **Userモデルの場合**にも書きましたが、対処方法については[こちらの説明](/sub/user-resource-sample.md)を参照してください
60 |
--------------------------------------------------------------------------------
/sub/add-sort.md:
--------------------------------------------------------------------------------
1 | # 並び替え機能の追加
2 |
3 | 管理画面で登録データの並び替えしたい場合、Filamentでは手軽に機能を追加することができます
4 |
5 | ```vim
6 | app/Filament/Resources/PostResource.php
7 | ---before---
8 | public static function table(Table $table): Table
9 | {
10 | return $table
11 | ->columns([
12 | Tables\Columns\TextColumn::make('title')->label('タイトル'),
13 | Tables\Columns\TextColumn::make('body')->label('本文'),
14 | ])
15 | ------------
16 | ↓
17 | ---after---
18 | public static function table(Table $table): Table
19 | {
20 | return $table
21 | ->columns([
22 | Tables\Columns\TextColumn::make('title')->label('タイトル')->sortable(), //ここにsortableを追加
23 | Tables\Columns\TextColumn::make('body')->label('本文')->sortable(), //ここにsortableを追加
24 | ])
25 | -----------
26 | ```
27 |
28 | ## before
29 |
30 |
31 |
32 | ## after
33 |
34 |
35 | ## タイトルでソート時
36 |
37 |
38 |
39 | ## 検索と併用可能
40 | ソート対象に加えて[こちらのページ](/sub/add-search.md)に記載した検索機能も下記の様にsearchableを付け加えるだけで検索対象にすることも可能
41 |
42 | ```vim
43 | app/Filament/Resources/PostResource.php
44 | ---before---
45 | public static function table(Table $table): Table
46 | {
47 | return $table
48 | ->columns([
49 | Tables\Columns\TextColumn::make('title')->label('タイトル')->sortable(), //ここにsortableを追加
50 | Tables\Columns\TextColumn::make('body')->label('本文')->sortable(), //ここにsortableを追加
51 | ])
52 | ------------
53 | ↓
54 | ---after---
55 | public static function table(Table $table): Table
56 | {
57 | return $table
58 | ->columns([
59 | Tables\Columns\TextColumn::make('title')->label('タイトル') //見やすくするため改行追加
60 | ->sortable()->searchable(), //ここにsearchableを追加
61 | Tables\Columns\TextColumn::make('body')->label('本文') //見やすくするため改行追加
62 | ->sortable()->searchable(), //ここにsearchableを追加
63 | ])
64 | -----------
65 | ```
66 |
67 | あら便利💕
68 |
69 | 詳しくはオフィシャルドキュメントを参照👉 [Columns - Table Builder - Filament](https://filamentphp.com/docs/2.x/tables/columns#sorting)
70 |
--------------------------------------------------------------------------------
/sub/user-resource-sample.md:
--------------------------------------------------------------------------------
1 | # ユーザモデル管理画面作成例
2 | ユーザモデルはメールアドレスのユニーク制限やパスワードのハッシュ化、ユーザ情報更新時のパスワード情報等の取り扱いに癖があるので、ここではFilamentでのそれらの情報の扱い方を解説
3 |
4 | ## まずはUser用リソースを作成
5 | 下記コマンドを実行してUserモデル用のFilamentリソースファイルを作成してください
6 | ```sh
7 | php artisan make:filament-resource User
8 | ```
9 |
10 | ## 次にリソース編集部分を作成
11 | 作成されたFilamentのリソースファイルを下記のように変更します
12 |
13 | ```vim
14 | app/Filament/Resources/UserResource.php
15 | ---before---
16 | public static function form(Form $form): Form
17 | {
18 | return $form
19 | ->schema([
20 | //
21 | ]);
22 | }
23 |
24 | public static function table(Table $table): Table
25 | {
26 | return $table
27 | ->columns([
28 | //
29 | ])
30 | ->filters([
31 | //
32 | ])
33 | ------------
34 | ↓
35 | ---after---
36 | public static function form(Form $form): Form
37 | {
38 | return $form
39 | ->schema([
40 | //名前
41 | Forms\Components\TextInput::make('name')->required()->label('名前'),
42 |
43 | //メアド:編集保存時にメアドのユニーク制限でエラーにならないようにignoreRecordをtrueにする
44 | Forms\Components\TextInput::make('email')->required()->label('メールアドレス')
45 | ->unique(ignoreRecord: true),
46 |
47 | //パスワード:パスワードのハッシュ化や、編集時に都度再入力を求められないようにdehydrateを使う
48 | Forms\Components\TextInput::make('password')
49 | ->password()
50 | ->dehydrateStateUsing(fn ($state) => Hash::make($state))
51 | ->dehydrated(fn ($state) => filled($state))
52 | ->required(fn (string $context): bool => $context === 'create')
53 | ->same('password_confirmation')
54 | ->label('パスワード'),
55 |
56 | //パスワード確認フィールド
57 | Forms\Components\TextInput::make('password_confirmation')
58 | ->password()
59 | ->required(fn (string $context): bool => $context === 'create')
60 | ->dehydrated(false)
61 | ->label('パスワード確認')
62 | ]);
63 | }
64 |
65 | public static function table(Table $table): Table
66 | {
67 | return $table
68 | ->columns([
69 | Tables\Columns\TextColumn::make('name')->label('名前'),
70 | Tables\Columns\TextColumn::make('email')->label('メールアドレス'),
71 | ])
72 | ->filters([
73 | //
74 | ])
75 | ------------
76 | ```
77 |
78 | ## 作成された画面例
79 | - 一覧画面
80 |
81 |
82 | - ユーザ新規作成
83 |
84 |
85 | - 作成すると右上に成功メッセージ
86 |
87 |
88 | - 作成後の一覧画面
89 |
90 |
91 | - 編集画面(名前:sample -> sample123に変更)
92 |
93 |
94 | - 保存すると右上に成功メッセージ。パスワードは何も入力しない時は既存のパスワードが温存される動き
95 |
96 |
97 | - 編集後の一覧画面
98 |
99 |
100 |
101 | ## オフィシャルドキュメント
102 | 詳しくはオフィシャルドキュメントを見よう
103 | 👇
104 | - [uniqueについて](https://filamentphp.com/docs/2.x/forms/validation#unique)
105 | - [パスワードのハッシュかや編集時のTIPS](https://filamentphp.com/tricks/password-form-fields)
106 | - [Dehydrationについて](https://filamentphp.com/docs/2.x/forms/advanced#dehydration)
107 |
--------------------------------------------------------------------------------
/sub/add-custom-page.md:
--------------------------------------------------------------------------------
1 | # カスタムページの作り方
2 | Filamentでは個別ページを作成する機能も用意されています
3 |
4 | ## カスタムページの作成
5 | 下記のコマンドを実行してカスタムページを作ってみましょう
6 | ```bash
7 | php artisan make:filament-page Imports
8 |
9 | (Optional) Resource (e.g. `UserResource`):
10 | > (ここは何も入れずにEnterキーをおします)
11 | ```
12 | 実行すると下記の2つのファイルが作成されます
13 | - `app/Filament/Pages/Imports.php`
14 | - `resources/views/filament/pages/imports.blade.php`
15 |
16 | ダッシュボードにアクセスすると何も無いブランクページが作成されています
17 |
18 |
19 |
20 | ## カスタムコンポーネントを読み込ませてみよう
21 | ブログ記事用のPostモデルにCSVファイルからデータを読み込ませるカスタムコンポーネントをこのページに設定してみましょう
22 |
23 | ### コンポーネントパッケージのインストール
24 | 手前味噌ですが、Livewireを使用してお手軽にCSVデータをインポートするパッケージを作ってありますので、こちらを本Laravelプロジェクトにインストールします
25 | ```bash
26 | composer require askdkc/livewire-csv
27 | ```
28 | インストール後、下記のコマンドを実行し必要なセットアップを実行します
29 | ```bash
30 | php artisan livecsv-setup
31 |
32 | Preparing Livewire-CSV necessary migrations / 必要なマイグレーションを準備します
33 | Publishing migration... / マイグレーションファイル準備中
34 | Migration Jobs created successfully / Jobsテーブル作成
35 | Migration Job Batches created successfully / Job Batches テーブル作成
36 | Migration Csv Imports created successfully / Csv Importsテーブル作成
37 | Adding Japanese Validation file... / 日本語のバリデーションファイルを作成します
38 | Done! / 完了!
39 |
40 | Would you like to run the migrations now? / マイグレーションを実行しますか? (yes/no) [no]:
41 | > yes ←ここはyesと入力してください
42 |
43 | Running migrations... / 実行中...
44 | INFO Running migrations.
45 |
46 | 2022_10_24_023104_create_jobs_table .............................. 10ms DONE
47 | 2022_10_24_023105_create_csv_imports_table ........................ 2ms DONE
48 | 2022_10_24_023106_create_job_batches_table ........................ 1ms DONE
49 |
50 | Would you like to star our repo on GitHub?
51 | GitHubリポジトリにスターの御協力をお願いします🙏 (yes/no) [no]:
52 | > yes ← よかったらGitHubリポにスターをお願いします
53 |
54 | ```
55 |
56 | ### コンポーネントをカスタムページに設定する
57 | それではインストールされたLivewireコンポーネントをカスタムページに読み込ませてみましょう
58 |
59 | ```vim
60 | resources/views/filament/pages/imports.blade.php を開いて編集します
61 |
62 | ---before---
63 |
64 |
65 |
66 | ------------
67 | ↓
68 | ---after---
69 |
70 | データインポート
71 |
72 |
80 |
81 | -----------
82 |
83 | ```
84 |
85 | ダッシュボードに追加されたImportsにアクセスし直すと下記のような表示になります
86 |
87 |
88 |
89 | `データインポート`をクリックするとインポート用ウィンドウが画面右側からにょっきり生えてきます
90 |
91 |
92 | ただし、Filamentのデフォルトのスタイルと相性が悪くてインポート用のボタンが見えません
93 | 
94 |
95 | ### コンポーネントのカスタマイズ
96 | インポート用のLivewireコンポーネントのViewファイルを`vendor:publish`してカスタマイズします
97 |
98 | ```bash
99 | php artisan vendor:publish --tag=livewire-csv-views
100 |
101 |
102 | INFO Publishing [livewire-csv-views] assets.
103 |
104 | Copying directory [vendor/askdkc/livewire-csv/resources/views] to [resources/views/vendor/livewire-csv] DONE
105 |
106 | ```
107 |
108 | 続いて `resources/views/vendor/livewire-csv/livewire/tailwindcss/csv-importer.blade.php` を開いて編集します
109 |
110 | ```vim
111 | Filamentのカラーテーマはカスタムカラーを使っているので、そちらに合わせます(indigo→primary)
112 |
113 | ---before---
114 |