Поле пароль и подтверждение пароля

  1. Главная
  2. Блог
  3. Filament
  4. Поле пароль и подтверждение пароля
Автор: Никита Куликов Время на чтение: 59 секунд
Пример как реализовать два поля "пароль" и "подтверждение пароля" в UserResource стандартными средствами Filament.

Допустим у нас есть вот такие поля в ресурсе юзера

1class UserResource extends Resource
2{
3 protected static ?string $model = User::class;
4 
5 public static function form(Form $form): Form
6 {
7 return $form
8 ->schema([
9 Forms\Components\Card::make()->schema([
10 Forms\Components\TextInput::make('name')->required(),
11 Forms\Components\TextInput::make('email')->required()->unique(ignoreRecord: true),
12 Forms\Components\TextInput::make('password')->password()->minLength(8)
13 ])
14 ]);
15 }
16 
17...

Необходимо добавить еще одно поле для подтверждения пароля

1Forms\Components\TextInput::make('passwordConfirmation')->password()->minLength(8)

Далее производим синхронизацию этих полей, в итоге должно получиться так

1class UserResource extends Resource
2{
3 protected static ?string $model = User::class;
4 
5 public static function form(Form $form): Form
6 {
7 return $form
8 ->schema([
9 Forms\Components\Card::make()->schema([
10 Forms\Components\TextInput::make('name')->required(),
11 Forms\Components\TextInput::make('email')->required()->unique(ignoreRecord: true),
12 Forms\Components\TextInput::make('password')
13 ->password()
14 ->autocomplete('new-password') // убираем автокомплит от браузера
15 // поле обязательно при создании новой записи
16 ->required(fn(Page $livewire): bool => $livewire instanceof Pages\CreateUser)
17 ->minLength(8)
18 ->same('passwordConfirmation') // должно быть равно полю подтверждения
19 ->dehydrated(fn($state) => filled($state)) // записываем когда поле заполнено
20 ->dehydrateStateUsing(fn($state) => Hash::make($state)), // хэшируем введённый пароль
21 Forms\Components\TextInput::make('passwordConfirmation') // поле для ввода повтора пароля
22 ->password()
23 ->required(fn(Page $livewire): bool => $livewire instanceof Pages\CreateUser)
24 ->minLength(8)
25 ->dehydrated(false) // откл. дегидрацию пароля, чтобы поле не попало в запись
26 ])
27 ]);
28 }
29 
30...
3

Комментарии

Комментариев нет

Авторизуйтесь чтобы оставить комментарий