什麼是 Precognition
Precognition 是在表單送出前執行伺服器端驗證的機制。 不需要在前端重複定義驗證規則,可直接使用 Laravel 的規則。 與一般請求不同,Precognition 請求會執行路由的 middleware 與 form request 的驗證,但不會執行 controller 方法本體。 因此適合輸入過程中的即時驗證。安裝
在 Laravel 13 中,後端不需要另行安裝laravel/precognition。
所需的是前端的 helper 套件。
- Vue:
laravel-precognition-vue - React:
laravel-precognition-react - Alpine.js:
laravel-precognition-alpine
Inertia 自 2.3 起內建 Precognition 支援。Inertia 3 也可直接使用。
使用 Inertia form 時,通常不需要額外安裝
laravel-precognition-vue / laravel-precognition-react。後端設定
在路由加入HandlePrecognitiveRequests middleware。
實務上建議將驗證規則集中在 form request。
集中在 form request 有助於規則的重用與職責分離。
前端整合
Alpine.js(Blade)
Vue(Inertia.js)
React(Inertia.js)
使用 Axios 的原生 JS
Precognition 函式庫使用 Axios。 若要沿用既有的 Axios 實例,可用client.use() 替換。
控制驗證的時機
以validate() 進行逐項驗證。
setValidationTimeout() 調整 debounce 時間。
validateFiles()。
Form Helper
useForm() 可一併管理送出狀態與錯誤狀態。
validating:正在進行驗證請求processing:正在送出errors:錯誤清單valid('field')/invalid('field'):欄位的驗證狀態submit():正常送出