0

Я относительно новичок в Laravel и попытаюсь что-то понять. Я создал базовый проект и использовать `Laravel 5.3 - Auth Scaffolding Как вставляются ошибки

` PHP мастеровой марку: AUTH

`для создания подмостей аутентификации.

В сгенерированных представлениях доступна переменная $ errors. Я знаю, что это можно вставить в представление с помощью метода withErrors().

Однако я не могу найти, как это вставляется в пример. Под капотом следующая функция, как представляется, обработка регистрации:

/** 
* Handle a registration request for the application. 
* 
* @param \Illuminate\Http\Request $request 
* @return \Illuminate\Http\Response 
*/ 
public function register(Request $request) 
{ 
    $this->validator($request->all())->validate(); 

    event(new Registered($user = $this->create($request->all()))); 

    $this->guard()->login($user); 

    return $this->registered($request, $user) 
        ?: redirect($this->redirectPath()); 
} 

Так метод проверки подлинности из RegisterController по умолчанию называется, и он возвращает валидатор. Но я не могу понять, как ошибки в валидаторе вставляются в представление auth.register.

ответ

1

Что происходит, когда происходит ошибка проверки является то, что Laravel бросает исключение. В этом случае бросается экземпляр ValidationException.

Laravel обрабатывает любое неперехваченное исключение, используя его Illuminate\Foundation\Exceptions\Handler класс. В вашем приложении вы должны увидеть класс, который расширяет его в app/Exceptions/Handler.php. В этом классе вы увидите, что метод render называет это render метод родителя, который, если вы проверить код содержит следующие строки:

public function render($request, Exception $e) 
{ 
    $e = $this->prepareException($e); 

    if ($e instanceof HttpResponseException) { 
     return $e->getResponse(); 
    } elseif ($e instanceof AuthenticationException) { 
     return $this->unauthenticated($request, $e); 
    } elseif ($e instanceof ValidationException) { 
     return $this->convertValidationExceptionToResponse($e, $request); 
    } 

    return $this->prepareResponse($request, $e); 
} 

И если вы проверяете дальше в том же классе, в методе convertValidationExceptionToResponse вы можете увидеть что Laravel мигает с ошибками в ответ и перенаправляет обратно с помощью входа (когда запрос не ожидает JSON):

protected function convertValidationExceptionToResponse(ValidationException $e, $request) 
{ 
    if ($e->response) { 
     return $e->response; 
    } 

    $errors = $e->validator->errors()->getMessages(); 

    if ($request->expectsJson()) { 
     return response()->json($errors, 422); 
    } 

    return redirect()->back()->withInput($request->input())->withErrors($errors); 
} 
0

RegisterController расширяет контроллер, если мы посмотрим на класс контроллера можно увидеть использование признака Illuminate\Foundation\Validation\ValidatesRequests;

Если мы посмотрим глубже, мы находим:

/** 
    * Create the response for when a request fails validation. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param array $errors 
    * @return \Symfony\Component\HttpFoundation\Response 
    */ 
    protected function buildFailedValidationResponse(Request $request, array $errors) 
    { 
     if ($request->expectsJson()) { 
      return new JsonResponse($errors, 422); 
     } 

     return redirect()->to($this->getRedirectUrl()) 
         ->withInput($request->input()) 
         ->withErrors($errors, $this->errorBag()); 
    }