검증이란
검증이란, 사용자로부터 송신된 데이터가 기대하는 형식이나 조건을 만족하고 있는지를 검증하는 것입니다. Laravel은 리퀘스트 오브젝트의validate 메서드나 전용의 폼 리퀘스트 클래스를 사용한, 심플하고 강력한 검증 기능을 제공하고 있습니다.
컨트롤러에서의 검증
$request->validate()의 사용법
컨트롤러의 메서드 내에서 $request->validate()를 호출하는 것이, 가장 심플한 검증 방법입니다.
검증에 실패하면, Laravel은 사용자를 이전 화면으로 자동으로 리다이렉트하고, 에러 정보를 세션에 보존합니다.
라우트를 정의합니다.
validate 메서드에는 필드명을 키, 규칙을 값으로 한 배열을 전달합니다.
규칙은 파이프 |로 구분하거나, 배열로 지정할 수 있습니다.
주요 검증 규칙
이용 가능한 모든 검증 규칙은 공식 문서에서 확인할 수 있습니다.
검증 완료 데이터의 이용
validate 메서드의 반환값은, 검증에 통과한 데이터만을 포함하는 배열입니다.
신뢰할 수 있는 데이터로서 안전하게 사용할 수 있습니다.
Blade 템플릿에서의 에러 표시
검증에 실패하면, Laravel은$errors 변수를 모든 뷰에서 자동적으로 이용할 수 있도록 합니다.
web 미들웨어 그룹에 포함되는 ShareErrorsFromSession 미들웨어가 이를 담당하고 있습니다.
모든 에러를 일람 표시
필드별로 에러를 표시
@error 디렉티브를 사용하면, 특정 필드의 에러를 인라인으로 표시할 수 있습니다.
폼 리퀘스트
폼 리퀘스트란
검증 로직이 복잡해진 경우는, “폼 리퀘스트” 클래스에 잘라 내는 것이 효과적입니다. 폼 리퀘스트는 검증과 인가의 로직을 하나의 클래스에 정리한 커스텀 리퀘스트 클래스입니다.폼 리퀘스트의 작성
make:request Artisan 명령으로 폼 리퀘스트 클래스를 생성합니다.
app/Http/Requests/StorePostRequest.php가 생성됩니다.
rules() 메서드
검증 규칙을 배열로 반환합니다. 컨트롤러의 validate 메서드에 전달하는 배열과 같은 형식입니다.
authorize() 메서드
이 리퀘스트를 실행할 권한이 있는지를 판정합니다.
true를 반환하면 인가 OK, false를 반환하면 403 응답이 자동적으로 반환됩니다.
인증된 사용자만 허가하는 경우, auth()->check()로 확인할 수 있습니다.
튜토리얼에서는 true를 반환해 두면 문제없습니다.
컨트롤러에의 주입
폼 리퀘스트는 컨트롤러 메서드의 타입 힌트로서 지정하는 것만으로 사용할 수 있습니다. 컨트롤러가 호출되기 전에 검증이 실행되기 때문에, 메서드 내에 검증 코드를 작성할 필요는 없습니다.$request->validated()로 검증 완료 데이터만을 취득할 수 있습니다.
실천 예: 투고 폼의 작성과 보존
폼의 표시부터 송신·검증·보존까지의 일련의 플로우입니다.1
라우트의 정의
2
폼 리퀘스트의 작성
3
컨트롤러의 구현
4
Blade 템플릿의 작성
Blade 폼에는 반드시
@csrf 디렉티브를 포함해 주세요. CSRF 토큰이 없으면 Laravel은 419 에러를 반환합니다.다음 단계
HTTP 리퀘스트
리퀘스트 오브젝트를 사용한 데이터 취득 방법을 되돌아봅니다.