Laravel表单不会PATCH,只有POST - 嵌套的RESTfull控制器,MethodNotAllowedHttpException

maa*_*ten 7 laravel laravel-4 laravel-routing

我试图允许用户编辑他们的播放列表.但是,每当我尝试执行PATCH请求时,都会收到MethodNotAllowedHttpException错误.(它期待一个POST)

我已经设置了RESTful资源控制器:

routes.php文件:

Route::resource('users', 'UsersController');
Route::resource('users.playlists', 'PlaylistsController');
Run Code Online (Sandbox Code Playgroud)

这应该让我访问:(通过php artisan路线显示)

URI                                        | Name                   | Action
PATCH users/{users}/playlists/{playlists}  | users.playlists.update | PlaylistsController@update
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试执行以下表单时,我得到MethodNotAllowedHttpException错误:

/用户/ TESTUSER /播放/ 1 /编辑

{{ Form::open(['route' => ['users.playlists.update', $playlist->id], 'method' => 'PATCH' ]) }}
{{ Form::text('title', $playlist->title) }}
{{ Form::close() }}
Run Code Online (Sandbox Code Playgroud)

如果我删除'method'=> 'PATCH'我没有得到错误,但它执行我public function store()而不是我的public function update()

Ale*_*mia 14

写完{!! method_field('patch') !!}表格后:

<form method="POST" action="patchlink">
     {!! method_field('patch') !!}
     . . .
</form>
Run Code Online (Sandbox Code Playgroud)

辅助功能的官方文档 method_field()


Nen*_*nad 7

由于html表单仅支持GET,因此POST您需要在调用的表单中添加额外的隐藏字段_method以模拟PATCH请求

<input type="hidden" name="_method" value="PATCH">
Run Code Online (Sandbox Code Playgroud)


Sea*_*ean 7

在Laravel 5及更高版本中:

<form method="POST" action="patchlink">
    @method('patch')
    . . .
</form>
Run Code Online (Sandbox Code Playgroud)


mch*_*cha 5

正如@Michael A 在上面的评论中所建议的,将其作为 POST 发送

<form method="POST" action="patchlink">
     <input type="hidden" name="_method" value="PATCH">
Run Code Online (Sandbox Code Playgroud)

为我工作。