2017-11-16 8 views
1

Laravel documentation를 인용 코드 App\Http\Controllers\Controller은 실제로 ValidatesRequests 형질을 사용합니다. ValidatesRequests에는 validate 메서드가 있습니다.request()를 통해 validate() 메서드에 액세스 할 수있는 이유는 무엇입니까?</p> 기본적으로 <blockquote> <p>는 Laravel의 기본 컨트롤러 클래스는 강력한 유효성 검사 규칙</p> </blockquote> <p>그것은 사실의 다양한 들어오는 HTTP 요청을 검증 할 수있는 편리한 방법을 제공하는 ValidatesRequests 특성을 사용, 읽기 :

정말 이상한 점은 설명서의 validate 메서드가 $request 개체에서 호출된다는 것입니다. 그리고 그것은이 방법으로 작동합니다. 이 코드로 양식을 확인할 수 있습니다.

public function store() 
{ 
    $attributes = request()->validate([ 
     'name' => 'required|string|max:255', 
    ]); 
    // ... 
} 

그러나 Request 클래스에는 유효성 검사 메소드가 없습니다. 파일의 시작 부분에 그냥 이상한 주석 행 : 나는 Laravel 설명서에 신뢰 모르는

  • :
    /** 
    * @method array validate(array $rules, array $messages = [], array $customAttributes = []) 
    */ 
    

    그래서 두 가지가 있습니다.
  • 그리고 유효성 검사가 $request 개체에서 어떻게 작동하는지 이해할 수 없습니다.

그리고 내 실제 질문은 :

은 내가 $request 객체를 통해 validate 방법을 사용하는 경우 여전히 진정한 문서에서 붙여 초기 견적인가? 그렇다면 어떻게 작동합니까?

답변

0

"이상한 의견"은 removed a couple days ago입니다.

나는 Requestvalidate 기능을 Request::macro('validate', ...) 전화에서 FoundationServiceProvider.php으로 호출한다고 생각합니다. 매크로에 대한 자세한 내용은 this article을 참조하십시오.

+0

감사합니다. 그렇다면이 경우 ValidatesRequests가 쓸모 없다고 생각합니까? Laravel의 초기 인용문은 현재 적합하지 않습니다. (왜냐하면 처음의 인용문이'ValidatesRequests' 특성을 고려하지 않기 때문에 전체 문서가 작성된 방식이기 때문입니다) –

+0

@ rap-2-h 아니요, 쓸모가 없습니다. 그들은 다른 상황을위한 것입니다. * 컨트롤러 *와'request() -> validate()'에서'$ this-> validate()'는 같은 것이 아닙니다. – ceejayoz

+0

죄송합니다. 죄송 합니다만, "쓸모 없지 않다"는 뜻이 아니 었습니다 (어쨌든, 썼습니다). 나는 "당신은 ValidatesRequests가이 경우에는 사용되지 않는다고 생각합니까?"라고 묻고 싶었습니다. 어쨌든 감사합니다! –

1

글쎄, validate 메서드가 있지만 FormRequest에 직접 있지는 않지만 ValidatesWhenResolvedTrait 특성에 있으므로 FormRequest에서 문제없이 사용할 수 있으므로 문서가 잘됩니다.

trait ValidatesWhenResolvedTrait 
{ 
    /** 
    * Validate the class instance. 
    * 
    * @return void 
    */ 
    public function validate() 
    { 
     $this->prepareForValidation(); 

     $instance = $this->getValidatorInstance(); 

     if (! $this->passesAuthorization()) { 
      $this->failedAuthorization(); 
     } elseif (! $instance->passes()) { 
      $this->failedValidation($instance); 
     } 
    } 

그래서 당신이 컨트롤러에서 실행되는 :이 특성의 시작 부분에

살펴 보자

request()->validate 

당신이 특성의 방법을 실행하고 ValidatesRequests이와 아무런 공통점이 없다 .

$this->validate(request(), [ 
     'name' => 'required|string|max:255', 
    ]); 

을하고 지금은 ValidatesRequests 요청에서 validate 방법을 사용하는 것입니다 :

또는 당신은 "컨트롤러 방법"검증 당신이 할 수있는 사용하고자하는 경우.

확인했듯이 Laravel에서 유효성 검사를 실행하는 여러 가지 방법이 있습니다. 개인적으로 양식 요청 유효성 검사 대신 사용합니다.

+0

감사! 나는 조금 잃었다. 이'validate' 메소드는'request() -> validate (...)'를 호출 할 때 제공했던 예제에서 호출 된 메소드입니까? 나는이 부분에 어떤 매개 변수도 보지 않으며 같은 목적을위한 것이 아닌 것처럼 보입니다. (하지만 어쩌면 내가 틀 렸습니다. 때로는 Laravel의 "마법"측면에서 길을 잃었습니다). –

+0

얼마전에 내 대답을 업데이트했습니다. 'request() -> validate()'를 실행할 때, 당신이 내 대답의 시작 부분에 보여준 메소드를 실행하고'$ this-> validate (request()'를 실행하고 있다면'ValidateRequests '컨트롤러의 특징 –