@TAnonim

Для чего нужен after hook в laravel Form Request?

Приветствую. В документации есть раздел про after hooks со следующим примером:
public function withValidator($validator)
{
    $validator->after(function ($validator) {
        if ($this->somethingElseIsInvalid()) {
            $validator->errors()->add('field', 'Something is wrong with this field!');
        }
    });
}

В каком классе нужно определять эту функцию и что вообще делает эта фича? На enSO говорят, что это нужно для переиспользования кода, но мне всё равно не совсем понятно.
  • Вопрос задан
  • 834 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Yadalay
Php, Mysql, Html, Css, Js/Jquery/Ajax, Laravel
Для того, чтобы добавить свои правила и вывод сообщений об ошибке валидации. Вот пример:
/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [
        'current_password' => 'required_with:password',
        'password' => 'required_with:current_password|confirmed',
        'name' => 'required|unique:users,name,' . $this->user()->id
    ];
}

/**
 * Configure the validator instance.
 *
 * @param  \Illuminate\Validation\Validator  $validator
 * @return void
 */
public function withValidator($validator)
{
    $validator->after(function ($validator) {
        $currentPassword = $this->current_password;

        if (! empty($currentPassword) && ! Hash::check($currentPassword, $this->user()->password)) {
            $validator->errors()->add('current_password', 'Текущий пароль не совпадает с указанным паролем.');
        }

        if (! empty($currentPassword) && ! strcmp($currentPassword, $this->password)) {
            $validator->errors()->add('password', 'Новый пароль не может совпадать с текущим паролем.');
        }

        if (! empty($this->password) && mb_strlen($this->password) < 6) {
            $validator->errors()->add('password', 'Пароль должен содержать минимум 6 символов.');
        }
    });
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы