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

时间:2014-09-15 22:05:47

标签: laravel laravel-4 laravel-routing

我正在尝试允许用户编辑播放列表。但是,每当我尝试执行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()

4 个答案:

答案 0 :(得分:14)

在表单后写{!! method_field('patch') !!}

<form method="POST" action="patchlink">
     {!! method_field('patch') !!}
     . . .
</form>

Official documentation for helper function method_field()

答案 1 :(得分:7)

由于html表单仅支持GETPOST,因此您需要添加额外的隐藏字段 到名为_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>