С появлением Form Request, хорошей практикой стало выносить валидацию из контроллера в отдельный класс. Однако в отдельных редких случаях это вызывает неудобства. Сегодня я покажу как использовать один класс для валидации данных при обновлении или создании записи.
Представим что у нас уже есть класс для валидации пользователя при создании, и выглядит он вот так:
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class UserRequest extends FormRequest { public function authorize() { return true; } public function rules() { return [ 'email' => 'required|email', 'first_name' => 'required', 'last_name' => 'required', 'gender' => 'required', 'password' => 'required|min:6', ]; } }
Метод rules()
возвращает набор правил валидации в виде массива. Таким образом мы можем проверить, какой HTTP метод использовался при запросе и изменить правила валидации.
Для обновления нам не нужно указывать пароль, это поле нужно только при создании, потому мы просто добавим условие в котором проверим HTTP метод.
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class UserRequest extends FormRequest { public function authorize() { return true; } public function rules() { $rules = [ 'email' => 'required|email', 'first_name' => 'required', 'last_name' => 'required', 'gender' => 'required', ]; if ($this->getMethod() == 'POST') { $rules['password'] = 'required|min:6'; } return $rules; } }
Как мы знаем, в laravel для создания записи используется метод POST
, а для обновления PUT
/ PATCH
.
После простых манипуляций класс можно использовать при обновлении / создании записи.