Проверка запроса формы Laravel

Есть ли способ получить исходные данные в запросе? Я имею в виду, что в моем случае я хочу проверить обновление пользователя в форме. Я хочу, чтобы электронная почта была уникальной для электронных писем в базе данных, кроме электронной почты, которую пользователь написал в форме.


person Epsilon47    schedule 02.11.2017    source источник
comment
Это вполне возможно с помощью встроенных валидаторов: laravel.com/docs/5.5/validation# уникальное правило   -  person Jerodev    schedule 02.11.2017


Ответы (3)


В Laravel уже есть правило проверки для этого, вы можете добавить идентификатор пользователя, которого следует игнорировать, в свой уникальный валидатор.

'email' => [
    'required',
    Rule::unique('users')->ignore($currentUser->id),
]
person Jerodev    schedule 02.11.2017

Я использовал что-то вроде этого:

'email' => ['sometimes', 'email', 'unique:users,email,'.$user->getKey().','.$user->getKeyName().',deleted_at,NULL', 'string'],

Не уверен, что это лучшее решение, но работает. Мне это не нравится, потому что $user основан на скрытом вводе из запроса.

person Epsilon47    schedule 02.11.2017

Вы можете сделать это следующим образом:

'email' => 'unique:users,email,'.$user->id

Идентификатор пользователя позволит вам обновлять запись, но сохранит уникальное ограничение на адрес электронной почты. Кстати, вам не нужно скрытое поле ввода для $user->id.

person Lars Mertens    schedule 02.11.2017
comment
Я делаю это, потому что форма, которую я обновляю, привязана так: {!! Form::model($customerAddress, ['route' => 'user.update', 'class' => 'form form-horizontal form-user-data']) !!}, и я не могу получить доступ к $this->user в запросе. - person Epsilon47; 02.11.2017