需手动添加 GitHub 仓库源并清缓存,满足 PHP 8.1+ 和 Laravel 10.27+,前端必须通过 @vite 全局引入 Precognition 并在 form 标签使用 data-precognition 属性。

Composer 安装 laravel-precognition 失败:找不到包
laravel-precognition 不是官方 Laravel 包,也不在 Packagist 默认索引里,直接 composer require laravel/precognition 会报 Could not find package laravel/precognition。它目前只以 GitHub 仓库形式存在,需手动添加仓库源。
- 必须在
composer.json的"repositories"数组里显式声明 GitHub 地址:"repositories": [ { "type": "vcs", "url": "https://github.com/laravel/precognition" } ] - 执行
composer require laravel/precognition前,先运行composer clear-cache,否则 Composer 可能仍按旧缓存拒绝识别新仓库 - 该包最低要求 PHP 8.1+ 和 Laravel 10.27+,低于这些版本会触发
Your requirements could not be resolved类错误,不是网络问题,是硬性兼容限制
Laravel Precognition 的前端验证必须配合 @vite 指令使用
它不提供独立 JS 文件或 CDN,所有客户端逻辑都打包进 Laravel 的 Vite 构建流程中。跳过 @vite 或用传统 mix() 加载,会导致 Precognition 全局变量未定义,表单提交时直接抛 ReferenceError: Precognition is not defined。
- Blade 模板中必须保留
@vite(['resources/js/app.js']),且app.js里要显式引入:import { Precognition } from 'laravel-precognition' - 不能只在某个页面局部 import;Precognition 需要在全局作用域可用,否则
data-precognition属性无法被自动接管 - 开发时若用
vite --mode development,确保VITE_DEV_SERVER_URL环境变量正确,否则预检请求(preflight)会发到http://localhost:5173而非你的 Laravel 后端,导致 CORS 错误
form 标签上漏掉 data-precognition 导致后端完全收不到预检请求
这是最常被忽略的触发点——Precognition 不靠 JS 初始化,而是靠 HTML 属性自动挂载。没这个属性,整个机制静默失效,表单退化为普通提交,后端 precognitive() 方法永远返回 false。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须写成
<form data-precognition>,不能是data-precognition="true"或其他值,只认有无该属性 - 如果用 Alpine.js 或 Vue 控制表单显隐,确保
data-precognition在 DOM 渲染完成时已存在,动态添加无效 - 每个需要预检的字段必须带
name属性,且值与后端验证规则 key 一致,比如后端用['email' => 'required|email'],前端 input 就得是<input name="email">,否则预检请求体为空,后端收不到字段
后端 precognitive() 方法返回 true 却没触发验证逻辑
这通常不是代码写错,而是请求没走对路由或中间件链断了。Precognition 的预检请求是 POST 到原表单 action 路径,但加了 X-Precognition: true 请求头,Laravel 靠这个头识别并短路验证。
立即学习“前端免费学习笔记(深入)”;
- 确保控制器方法里调用的是
$request->precognitive(),不是$request->isJson()或其他判断 - 如果用了自定义中间件(比如权限校验),必须把它放在
precognitive中间件之后,否则precognitive中间件还没运行就终止了请求 - 检查路由是否注册了
POST方法,GET 路由即使带X-Precognition: true头也不会触发预检逻辑

















