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

maarten picture maarten · Sep 16, 2014 · Viewed 16.4k times · Source

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()

Answer

Alex Lomia picture Alex Lomia · Apr 7, 2016

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

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

Official documentation for helper function method_field()