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(): 通常送信