├── 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 | model_name_before 36 | 37 | ### after 38 | model_name_changed 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 | before-search-feature 30 | 31 | ## after 32 | after-search-feature 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 | ez1 29 | 30 | New Post(作成)をクリックすると次のような新規データ作成画面に(テキストはダミーです) 31 | ez2 32 | 33 | 保存してPostデータ一覧に戻るとデータが追加されています 34 | ez3 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 | ezuser1 52 | 53 | Editをクリック後の画面 54 | ezuser2 55 | 56 | 上記のまま"Save Changes"をクリックするとPasswordが必須項目と警告が出る(正しくないというか、好ましくない動作) 57 | ezuser3 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 | before-sort 30 | 31 | 32 | ## after 33 | after-sort 34 | 35 | ## タイトルでソート時 36 | title-sort 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 | user1 81 | 82 | - ユーザ新規作成 83 | user2 84 | 85 | - 作成すると右上に成功メッセージ 86 | user3 87 | 88 | - 作成後の一覧画面 89 | user4 90 | 91 | - 編集画面(名前:sample -> sample123に変更) 92 | user5 93 | 94 | - 保存すると右上に成功メッセージ。パスワードは何も入力しない時は既存のパスワードが温存される動き 95 | user6 96 | 97 | - 編集後の一覧画面 98 | user7 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 | image 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 | image 88 | 89 | `データインポート`をクリックするとインポート用ウィンドウが画面右側からにょっきり生えてきます 90 | image 91 | 92 | ただし、Filamentのデフォルトのスタイルと相性が悪くてインポート用のボタンが見えません 93 | ![image](https://user-images.githubusercontent.com/7894265/197440187-650a99cd-c221-42c5-80e9-eeda59912b79.png) 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 |