
Laravel 7.1 已弃用 Form::open() 等 LaravelCollective 表单辅助函数,推荐直接使用 Blade 内置表单指令与标准 HTML 结合,既简洁又兼容性强。
laravel 7.1 已弃用 `form::open()` 等 laravelcollective 表单辅助函数,推荐直接使用 blade 内置表单指令与标准 html 结合,既简洁又兼容性强。
在 Laravel 7.1 及更高版本中,官方已不再内置 Form 和 HTML 辅助类(如 Form::open()、Form::model()),这些功能曾由第三方扩展包 LaravelCollective/Html 提供,但该包自 Laravel 5.8 起便未正式适配 Laravel 7+,且在 Laravel 7.1 默认安装中完全不存在——因此调用 Form::open() 会直接触发 Class "Form" not found 错误。
✅ 正确做法:使用 Laravel 原生 Blade 表单语法(基于标准 HTML + CSRF 保护 + 方法伪造)
Laravel 自动为每个 Blade 模板注入 CSRF 令牌,并支持通过 _method 隐藏字段模拟 PUT、PATCH、DELETE 请求。以下是常用场景的写法示例:
1. POST 表单(创建资源)
2. PUT/PATCH 表单(更新资源,以模型绑定为例)
? 注意:
@method('PUT')会自动渲染<input type="hidden" name="_method" value="PUT">,配合@csrf提供完整的安全表单结构。
3. 文件上传表单
⚠️ 关键:必须显式添加 enctype="multipart/form-data" 属性,否则文件无法提交。
? 补充说明:
-
@csrf是必需的,它等价于{{ csrf_field() }},用于防止跨站请求伪造; -
@method('PUT')等同于{{ method_field('PUT') }},仅在非GET/POST请求时需要; - 若需表单模型绑定(如自动填充旧输入或数据库值),可结合
old()辅助函数与模型属性,无需Form::model(); - 如确需 LaravelCollective 功能(不推荐),需手动安装兼容版本(如
laravelcollective/html:^6.0),但需自行承担维护与安全风险,且与 Laravel 7.1+ 的底层变更可能存在冲突。
总之,拥抱原生 Blade 表单语法不仅更轻量、更稳定,也更符合 Laravel 官方演进方向——简洁、明确、零依赖。











