跳转到主要内容

什么是 Precognition

Precognition 是一种在表单提交之前执行服务端校验的机制。 你无需在前端重复定义校验规则,可以直接使用 Laravel 的规则。 与普通请求不同,Precognition 请求会执行路由中间件与 Form Request 的校验,但不会执行控制器方法主体。 因此非常适合在输入过程中进行实时校验。

安装

在 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 中间件。 将校验规则集中在 Form Request 中是实践性的做法。 使用 Form Request 更便于规则复用和职责分离。
如果你自定义的中间件有副作用,请在 Precognition 时跳过。

前端集成

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():常规提交

普通请求与 Precognition 请求的对比

下图展示了普通请求与 Precognition 请求的处理差异。

相关链接

最后修改于 2026年7月18日