ユーザモデルはメールアドレスのユニーク制限やパスワードのハッシュ化、ユーザ情報更新時のパスワード情報等の取り扱いに癖があるので、ここではFilamentでのそれらの情報の扱い方を解説
下記コマンドを実行してUserモデル用のFilamentリソースファイルを作成してください
php artisan make:filament-resource User
作成されたFilamentのリソースファイルを下記のように変更します
app/Filament/Resources/UserResource.php
---before---
public static function form(Form $form): Form
{
return $form
->schema([
//
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
//
])
->filters([
//
])
------------
↓
---after---
public static function form(Form $form): Form
{
return $form
->schema([
//名前
Forms\Components\TextInput::make('name')->required()->label('名前'),
//メアド:編集保存時にメアドのユニーク制限でエラーにならないようにignoreRecordをtrueにする
Forms\Components\TextInput::make('email')->required()->label('メールアドレス')
->unique(ignoreRecord: true),
//パスワード:パスワードのハッシュ化や、編集時に都度再入力を求められないようにdehydrateを使う
Forms\Components\TextInput::make('password')
->password()
->dehydrateStateUsing(fn ($state) => Hash::make($state))
->dehydrated(fn ($state) => filled($state))
->required(fn (string $context): bool => $context === 'create')
->same('password_confirmation')
->label('パスワード'),
//パスワード確認フィールド
Forms\Components\TextInput::make('password_confirmation')
->password()
->required(fn (string $context): bool => $context === 'create')
->dehydrated(false)
->label('パスワード確認')
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('name')->label('名前'),
Tables\Columns\TextColumn::make('email')->label('メールアドレス'),
])
->filters([
//
])
------------
- 一覧画面
- ユーザ新規作成
- 作成すると右上に成功メッセージ
- 作成後の一覧画面
- 編集画面(名前:sample -> sample123に変更)
- 保存すると右上に成功メッセージ。パスワードは何も入力しない時は既存のパスワードが温存される動き
- 編集後の一覧画面
詳しくはオフィシャルドキュメントを見よう
👇