Skip to main content

什麼是 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 有助於規則的重用與職責分離。
若有具副作用的自訂 middleware,在 Precognition 時請跳過。

前端整合

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():正常送出

一般請求與 Precognition 請求的比較

下圖顯示一般請求與 Precognition 請求的處理差異。

相關連結

最後修改於 2026年8月2日