0

Laravel에 비교적 새로운 Im를 사용하여 뭔가를 이해하려고합니다. 나는 기본 프로젝트를 생성하고`Laravel 5.3 - Auth Scaffolding 오류가 삽입되는 방법

`PHP는 장인 메이크업을 사용 :

`인증

을 인증 비계를 생성 할 수 있습니다.

생성 된보기에서 $ 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 뷰에 삽입되는 방법을 이해할 수 없습니다.

/** 
    * 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()); 
    } 

답변

1

어떤 유효성 검사 오류가 발생했을 때 발생하는 Laravel이 발생한다는 것입니다 :

0

RegisterController 우리가 클래스 컨트롤러를 보면 우리가 더 깊이 보면, 우리가 찾을 사용 특성 Illuminate\Foundation\Validation\ValidatesRequests;

을 볼 수 있습니다, 컨트롤러를 확장 예외. 이 경우 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); 
}