Laravel 에서 router {path} validate 하기

Updated on

Route::get('/{name}/info', [Controller::class, 'getItemInfo']);

이런 형태의 router 가 있다고 하면, {name} 값에는 validate 를 걸고 싶을때가 있다.

여기에서 Route ->where 을 사용해서 할 수도 있긴하지만, 그냥 나는 FormRequest 에서 validate 처리하고 있다.

class GetItemInfoRequest extends FormRequest
{
    public function rules(): array
    {
        return [
            'name' => ['required', Rule::in(Name::cases())],
        ];
    }

    public function authorize(): bool
    {
        return true;
    }

	  // 이 아래 function 을 추가 해준다.
    protected function prepareForValidation(): void
    {
        $this->merge([...$this->route()->parameters()]);
    }
}

prepareForValidation 을 추가해주면, Request에서 rules에 route path 까지도 함께 처리할 수 있다.

나는 Name Enum 만 path validate 할 수 있게 적용해두었다.