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를 만들 수 있다고 합니다.
Laravel 프레임워크를 확장하고 싶은 경우 macro의 사용을 고려해 볼 수 있겠습니다.