我正在尝试允许用户编辑播放列表。但是,每当我尝试执行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 错误:
/用户/ TESTUSER /播放列表/ 1 /编辑
{{ 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()
答案 0 :(得分:14)
在表单后写{!! method_field('patch') !!}
:
<form method="POST" action="patchlink">
{!! method_field('patch') !!}
. . .
</form>
答案 1 :(得分:7)
由于html表单仅支持GET
和POST
,因此您需要添加额外的隐藏字段
到名为_method
的表单,以模拟PATCH
请求
<input type="hidden" name="_method" value="PATCH">
答案 2 :(得分:4)
正如@Michael A在上面的评论中所建议的那样,将其作为POST发送
<form method="POST" action="patchlink">
<input type="hidden" name="_method" value="PATCH">
为我工作。
答案 3 :(得分:3)
在Laravel 5及更高版本中:
<form method="POST" action="patchlink">
@method('patch')
. . .
</form>