Laravel 5.5提交表单触发MethodNotAllowedHttpException异常求助
问题分析与解决方案
这个MethodNotAllowedHttpException错误的核心原因是表单提交的请求方法和目标路由允许的方法不匹配,同时你的表单提交目标也搞错了,具体拆解如下:
1. 表单提交目标错误
你当前表单的action指向的是checkout.payment路由,但这个路由是用Route::get()定义的,只接受GET请求;而你的表单用POST方法提交,两者方法不匹配,Laravel就会直接抛出方法不允许的异常。
而且,你的表单数据本来应该提交到AddressesController的store方法来处理地址存储,但你却指向了支付页面的GET路由,这完全不符合逻辑。
2. 缺少处理表单提交的POST路由
你没有定义对应AddressesController@store的POST路由,导致即使表单指向正确的控制器方法,也没有路由来接收请求。
具体修复步骤
第一步:添加POST路由
在你的路由文件里,新增一条处理地址提交的POST路由:
// 可根据实际需求调整URL路径,比如/shipping-info Route::post('/shipping-info', 'AddressesController@store')->name('addresses.store');
第二步:修正表单的提交目标
把shipping-info.blade.php里的表单打开代码改成:
{!! Form::open(array('route' => 'addresses.store', 'method' => 'POST')) !!}
这里用route参数指定我们刚定义的路由名称,比直接写控制器方法更清晰,也符合Laravel的路由命名规范。
第三步:确认store方法的跳转逻辑
你的AddressesController里的store方法最后跳转到checkout.payment是没问题的,存储完地址后跳转到支付页面完全合理,这部分不需要修改。
这样修改后,表单会用POST方法提交到正确的路由,Laravel会调用AddressesController@store处理数据,成功后跳转到支付页面,就不会再出现方法不允许的错误了。
内容的提问来源于stack exchange,提问作者bimoan
相关产品推荐
相关产品推荐

