Laravel 10添加商品报错:POST方法不支持product/create路由
Laravel 10 添加商品功能异常排查与修复
问题现象
使用Laravel 10开发商品CRUD功能,数据库配置及迁移已完成,手动添加数据和删除功能正常,但添加商品时出现错误:
"The POST method is not supported for route product/create. Supported methods: GET, HEAD, PUT, PATCH, DELETE."
尝试修改add.blade.php表单提交方法为GET/PUT后,页面仅刷新,数据无法存入数据库。
错误原因分析
- 表单提交地址错误:
add.blade.php中表单action属性为空,导致提交到当前URL(/product/create),而该路由仅支持GET/HEAD等方法,不支持POST。 - 多余的请求方法声明:Laravel表单默认使用POST方法,无需额外添加
@method('POST'),该指令会干扰请求方法的正确识别。 - 硬编码URL不规范:视图中部分链接使用固定硬编码URL,既不利于环境迁移,也容易导致路由匹配错误。
修复步骤
1. 修正添加页面表单配置
修改add.blade.php中的表单,指定正确的提交路由并移除多余的方法声明:
<form id="add-frm" method="POST" action="{{ route('product.store') }}" class="border p-3 mt-2"> <div class="control-group col-6 text-left"> <label for="title">Title</label> <div> <input type="text" id="title" class="form-control mb-4" name="title" placeholder="Enter Title" required> </div> </div> <div class="control-group col-6 text-left mt-2"> <label for="body">Short Notes</label> <div> <textarea id="short_notes" class="form-control mb-4" name="short_notes" placeholder="Enter Short Notes" rows="" required></textarea> </div> </div> <div class="control-group col-6 text-left mt-2"> <label for="body">Price</label> <div> <input type="text" id="price" class="form-control mb-4" name="price" placeholder="Enter Price" required> </div> </div> @csrf <div class="control-group col-6 text-left mt-2"><button class="btn btn-primary">Add New</button></div> </form>
2. 替换硬编码URL为路由名称
add.blade.php中的商品列表链接:
<a href="{{ route('product.index') }}" class="btn btn-outline-primary">Product List</a>
list.blade.php中的新增商品链接:
<a href="{{ route('product.create') }}" class="btn btn-outline-primary">Add new product</a>
3. 验证路由配置(可选)
执行以下命令查看所有已注册路由,确认product.store路由存在且支持POST方法:
php artisan route:list
4. 确认模型填充属性
确保Product模型的$fillable属性包含所有需要存入数据库的字段(当前代码已正确配置):
protected $fillable = ['title', 'short_notes', 'price'];
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

