Как создать обратный вызов при проверке laravel, когда он не прошел проверку и прошел проверку? - PullRequest
1 голос
/ 09 мая 2020
• 1000 ниже:
  • при сбое проверки - создать сеанс / session(['attempt' => session('attempt')+1 ?? 1]);
  • при успешном завершении проверки - уничтожить сеанс / session()->forget('attempt')

Ответы [ 3 ]

1 голос
/ 09 мая 2020

@ mrhn правильно, вы не заполнили правила внутри функции, поэтому FormRequest всегда будет возвращать false. Вместо этого вы предпочитаете создавать свои собственные методы и использовать $this->validate().

Теперь вот, как решить вашу проблему, в файле .. \ Illuminate \ Validation \ Validator. php найдите функцию validate() и поместите те сеансы, которые вы хотите выполнить, как это показано ниже.

public function validate()
{
    if ($this->fails()) {
        session(['attempt' => session('attempt')+1 ?? 1]);
        throw new ValidationException($this);
    }else{
        session()->forget('attempt');
    }

    return $this->validated();
}

Приведенное выше решение является глобальным, что означает, что оно будет работать каждый раз, когда вы используете $this->validate().

1 голос
/ 09 мая 2020

Вы можете использовать экземпляр Validator вместо вызова validate()

    $validator = Validator::make($request->all(), [
         'first_name' => ['required','min:2','max:30',new PersonNameRule],
         'last_name' => ['required','min:2','max:30',new PersonNameRule],
         'username' => ['required','confirmed',new UsernameRule]
    ]);

    if ($validator->fails()) {
        // create a session
    } else {
        // destroy the session
    }

Вы можете увидеть больше в do c здесь: https://laravel.com/docs/7.x/validation#manually -creating-validators

0 голосов
/ 09 мая 2020

Сначала я конвертирую вашу валидацию в запрос формы, это будет автоматически разрешено при введении в контроллер.

UserCreateRequest extends FormRequest {
    public function rules() {
        'first_name' => ['required','min:2','max:30',new PersonNameRule],
        'last_name' => ['required','min:2','max:30',new PersonNameRule],
        'username' => ['required','confirmed',new UsernameRule]
    }
}

Чтобы использовать его, введите его вот так.

public create(UserCreateRequest $request) {
    ...
}

Здесь вы можете использовать два метода обратного вызова passedValidation() и failedValidation() в своем запросе формы.

protected function failedValidation(Validator $validator) {
    session(['attempt' => session('attempt')+1 ?? 1]);

    return parent::failedValidation($validator);
}

protected function passedValidation() {
    session()->forget('attempt')

    return parent::passedValidation();
}
...