Precognition이란
Precognition은 폼 전송 전에 서버 측 유효성 검증을 실행하는 구조입니다. 프런트엔드에서 검증 규칙을 중복 정의하지 않고, Laravel의 규칙을 그대로 사용할 수 있습니다. 일반 요청과 달리 Precognition 요청에서는 라우트의 미들웨어나 폼 리퀘스트의 검증은 실행되지만 컨트롤러 메서드 본체는 실행되지 않습니다. 따라서 입력 중의 실시간 검증에 적합합니다.설치
Laravel 13에서는 백엔드 측의laravel/precognition을 추가로 설치할 필요가 없습니다.
필요한 것은 프런트엔드용 헬퍼 패키지입니다.
- Vue:
laravel-precognition-vue - React:
laravel-precognition-react - Alpine.js:
laravel-precognition-alpine
Inertia는 2.3 이후부터 Precognition 지원이 내장되어 있습니다. Inertia 3에서도 그대로 이용할 수 있습니다.
Inertia 폼을 사용하는 경우, 일반적으로
laravel-precognition-vue / laravel-precognition-react의 추가 도입은 불필요합니다.백엔드 설정
라우트에HandlePrecognitiveRequests 미들웨어를 추가합니다.
유효성 검증 규칙은 폼 리퀘스트에 모으는 것이 실용적입니다.
폼 리퀘스트에 모으면 규칙의 재사용과 책임 분리가 쉬워집니다.
프런트엔드 연동
Alpine.js(Blade)
Vue(Inertia.js)
React(Inertia.js)
Axios를 사용한 바닐라 JS
Precognition 라이브러리는 Axios를 사용합니다. 기존 Axios 인스턴스를 사용하는 경우client.use()로 교체합니다.
유효성 검증 타이밍 제어
입력마다의 검증에는validate()를 사용합니다.
setValidationTimeout()으로 조정할 수 있습니다.
validateFiles()를 사용합니다.
폼 헬퍼
useForm()은 전송 상태나 에러 상태를 통합적으로 다룰 수 있습니다.
validating: 유효성 검증 요청 중processing: 전송 중errors: 에러 목록valid('field')/invalid('field'): 필드의 검증 상태submit(): 일반 전송