PUT 请求 Laravel 上的 MethodNotAllowedException
Posted
技术标签:
【中文标题】PUT 请求 Laravel 上的 MethodNotAllowedException【英文标题】:MethodNotAllowedException on PUT request Laravel 【发布时间】:2017-05-29 06:52:35 【问题描述】:我正在尝试使用 Laravel 在我的表单上执行 PUT 请求,它返回一个 MethodNotAllowedException,表单如下:
<form role="form" method="POST" action=" route('negocio.update', $negocio->id) " enctype="multipart/form-data">
method_field('PUT')
</form>
而我的路线注册为:
Route::put('/update/id', ['as' => 'negocio.update', 'uses' => 'client\NegocioController@update']);
使用php artisan route:list
命令给了我以下路线:
| PUT | update/id | negocio.update | App\Http\Controllers\client\NegocioController@update | web
谁能解释一下,我做错了什么?我已经在不同的网站上搜索过,但没有解决方案。
*更新:
我打开浏览器检查器以查看正在执行的请求类型,它正在尝试使用 get 方法访问另一条路由,我没有注册该方法,所以这就是显示错误的原因,但事实是,我没有不知道为什么表单会提交到另一个 url。
【问题讨论】:
route('negocio.update', $negocio->id) 的渲染内容是什么?是你提到的GET方法吗? 渲染内容例如:(base_path)/update/2
... 但是,我刚刚解决了这个问题,但我不知道为什么它不起作用,之前的请求导致“ PUT" 表单是一个 POST 请求,我将其更改为 GET 请求,现在它可以工作了...
【参考方案1】:
如果negocio
是一个资源控制器,并且您在 web.php 文件中拥有它,如下所示:Route::resource('negocio','NegocioController');
,请尝试这样做:
<form method="POST" action="route('negocio.update', $negocio->id)" enctype="multipart/form-data">
method_field('PUT') csrf_field()
</form>
但不要使用这个(删除或注释掉它):
Route::put('/update/id', ['as' => 'negocio.update', 'uses' => 'client\NegocioController@update']);
如果不是资源控制器,则在路由文件中声明如下:
Route::put('/update/id', 'NegocioController@update')->name('negocio.update');
如果这不能解决问题,请尝试使用 Post,然后让 method_field('Put')
解决问题。
Route::post('/update/id', 'NegocioController@update')->name('negocio.update');
希望这会有所帮助。如果是这样,请在此处告诉我们。
【讨论】:
以上是关于PUT 请求 Laravel 上的 MethodNotAllowedException的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ASP.NET 核心 mvc 向 asp.net 核心中的 Web API 发出 PUT 请求?
Laravel CSRF 令牌不匹配异常。通过 jQuery ajax 向资源路由发送“Put”请求
使用邮递员的 PUT/PATCH 请求在 Laravel 中返回状态码 0
使用 PUT 请求发送 multipart/form-data 在 Laravel 中不起作用