Laravel 表单不会 PATCH,只有 POST - 嵌套的 RESTfull 控制器,MethodNotAllowedHttpException
Posted
技术标签:
【中文标题】Laravel 表单不会 PATCH,只有 POST - 嵌套的 RESTfull 控制器,MethodNotAllowedHttpException【英文标题】:Laravel form won't PATCH, only POST - nested RESTfull Controllers, MethodNotAllowedHttpException 【发布时间】:2014-11-09 13:07:03 【问题描述】:我正在尝试允许用户编辑他们的播放列表。但是,每当我尝试执行 PATCH 请求时,都会收到 MethodNotAllowedHttpException 错误。 (它正在等待一个 POST)
我已经设置了 RESTful 资源控制器:
Routes.php:
Route::resource('users', 'UsersController');
Route::resource('users.playlists', 'PlaylistsController');
这应该让我可以访问:(通过 php artisan routes 显示)
URI | Name | Action
PATCH users/users/playlists/playlists | users.playlists.update | PlaylistsController@update
但是,当我尝试执行以下表单时,我收到 MethodNotAllowedHttpException 错误:
/users/testuser/playlists/1/edit
Form::open(['route' => ['users.playlists.update', $playlist->id], 'method' => 'PATCH' ])
Form::text('title', $playlist->title)
Form::close()
如果我删除'method'=> 'PATCH'
,我不会收到错误,但它会执行我的public function store()
,而不是我的public function update()
【问题讨论】:
【参考方案1】:在表格后写!! method_field('patch') !!
:
<form method="POST" action="patchlink">
!! method_field('patch') !!
. . .
</form>
Official documentation for helper function method_field()
【讨论】:
【参考方案2】:在 Laravel 5 及更高版本中:
<form method="POST" action="patchlink">
@method('patch')
. . .
</form>
【讨论】:
【参考方案3】:由于 html 表单仅支持 GET
和 POST
您需要添加一个额外的隐藏字段
到名为_method
的表单,以模拟PATCH
请求
<input type="hidden" name="_method" value="PATCH">
【讨论】:
PATCH 正在通过 Form::open 中的方法选项添加。您也可以使用 PUT。我遇到了同样莫名其妙的问题,无论我做什么,PUT 或 PATCH 方法都会抛出 MethodNotAllowedHttpException。非常令人沮丧。 尝试使用Route::any('the_url_where_you_post_to', function());
或根据您使用的方法Route::patch
或Route::put
【参考方案4】:
正如@Michael A 在上述评论中所建议的那样,将其作为 POST 发送
<form method="POST" action="patchlink">
<input type="hidden" name="_method" value="PATCH">
为我工作。
【讨论】:
以上是关于Laravel 表单不会 PATCH,只有 POST - 嵌套的 RESTfull 控制器,MethodNotAllowedHttpException的主要内容,如果未能解决你的问题,请参考以下文章