Laravel form won't PATCH, only POST - nested RESTfull Controllers, MethodNotAllowedHttpException

天涯浪子 提交于 2019-12-19 02:26:12

问题


I am trying to allow users to edit their playlist. However, whenever I try to execute the PATCH request, I get the MethodNotAllowedHttpException error. (it is expecting a POST)

I have set up RESTful Resource Controllers:

Routes.php:

Route::resource('users', 'UsersController');
Route::resource('users.playlists', 'PlaylistsController');

This should give me access to: (as displayed through php artisan routes)

URI                                        | Name                   | Action
PATCH users/{users}/playlists/{playlists}  | users.playlists.update | PlaylistsController@update

However, when I try to execute the following form, I get the MethodNotAllowedHttpException error:

/users/testuser/playlists/1/edit

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

If I remove 'method'=> 'PATCH' I don't get an error, but it executes my public function store() and not my public function update()


回答1:


In Laravel 5 and up:

<form method="POST" action="patchlink">
    @method('patch')
    . . .
</form>



回答2:


Write {!! method_field('patch') !!} after form:

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

Official documentation for helper function method_field()




回答3:


Since html forms support only GET and POST you need to add an extra hidden field to the form called _method in order to simulate a PATCH request

<input type="hidden" name="_method" value="PATCH">



回答4:


As suggested by @Michael A in the comment above, send it as a POST

<form method="POST" action="patchlink">
     <input type="hidden" name="_method" value="PATCH">

Worked for me.



来源:https://stackoverflow.com/questions/25857650/laravel-form-wont-patch-only-post-nested-restfull-controllers-methodnotallo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!