Laravel控制器自定义方法调用失败,报MethodNotAllowedHttpException错误
解决MethodNotAllowedHttpException错误的方案
这个问题其实很典型,核心原因就是你的路由定义和表单提交的HTTP方法不匹配,下面一步步帮你搞定:
1. 补全对应路由配置
你的表单明确用了POST方法提交请求,但目前给出的路由列表里只有GET类型的路由,完全没有为RoomsController@join配置对应的POST路由,Laravel找不到匹配的路由规则,自然就抛出这个错误了。
打开你的路由文件(通常是routes/web.php),添加一条POST类型的路由:
Route::post('/rooms/{id}/join', 'RoomsController@join');
这里的{id}会自动映射到你控制器join方法里的$id参数,和你代码里的参数定义完全对应。
2. 确认表单配置没问题
你的表单代码里已经指定了method => 'POST',这部分是正确的,而且Form::open会自动帮你生成CSRF令牌字段,不用额外处理这部分的安全验证。
额外小提示
如果之后你需要让这个join方法同时支持GET和POST请求,也可以用以下方式配置路由:
// 同时支持GET和POST请求 Route::match(['get', 'post'], '/rooms/{id}/join', 'RoomsController@join'); // 支持所有HTTP方法(不推荐,安全性较差) Route::any('/rooms/{id}/join', 'RoomsController@join');
不过对于「加入房间」这类会产生状态变更的操作,优先使用POST方法,更符合RESTful的设计规范。
内容的提问来源于stack exchange,提问作者Jani BoLd
相关产品推荐
相关产品推荐

