9Cells

Laravel Request의 validator() 메소드는 어디에 구현되어있나?

Laravel에서 validator를 사용하는 방법은 여러가지입니다.

그 중 컨트롤러에서 Illuminate\Http\Request의 validate()를 사용하는 방법이 있습니다.

$request->validate([
    'name' => 'required',
]);

여기서 복잡한 검사가 필요하여 기본적인 validation을 확장할 방법을 찾아야 했습니다.

그래서 validate() 구현을 확인하려고 프레임워크 소스코드로 점프해봤습니다.

그런데 Request에는 validate()에 대한 @method 주석만 있을 뿐 구현을 찾을 수 없었습니다.

좀 더 알아보니 validate()는 FoundationServiceProvider에 macro로 구현되어 있었습니다.

Request::macro('validate', function (array $rules, ...$params) {
    return validator()->validate($this->all(), $rules, ...$params);
});

Laravel에서 Macroable이 구현되어 있는 클래스는 macro를 만들 수 있다고 합니다.

file:laravel-macroable

Laravel 프레임워크를 확장하고 싶은 경우 macro의 사용을 고려해 볼 수 있겠습니다.