I have a problem with my edit page. When I submit I get this error:
The POST method is not supported for this route. Supported methods: GET, HEAD.
I have no clue where it comes from as I am pretty new to Laravel.
routes(web.php):
Route::group(['middleware' => 'auth'], function () {
Route::get('/', 'ProjectController@index');
Route::get('/projects/{id}', 'ProjectController@show');
Route::post('/create','ProjectController@store');
Route::get('/create', 'ProjectController@create');
Route::get('/projects/{id}/delete', 'ProjectController@destroy');
Route::put('/edit','ProjectController@update');
Route::get('/projects/{id}/edit', 'ProjectController@edit');
});
Controller:
public function edit($id)
{
return view('project.edit',[
'project' => Project::find($id)
]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request)
{
$project = Project::find($request->id);
$project->project_name = $request->input('project_name');
$project->client = $request->input('client');
$project->description = $request->input('description');
$project->time_span = $request->input('time_span');
$project->text_report = $request->input('text_report');
$project->created_by = $request->input('created_by');
$project->save();
return redirect('/')->with('success', 'Project aangepast');
}
There are multiple ways you can handle this:
If you insist on using PUT
you can change the form action to POST
and add a hidden method_field
that has a value PUT
and a hidden csrf field (if you are using blade then you just need to add @csrf_field
and {{ method_field('PUT') }}
). This way the form would accept the request.
You can simply change the route and form method to POST
. It will work just fine since you are the one defining the route and not using the resource group.
I know this is not the solution to OPs post. However, this post is the first one indexed by Google when I searched for answers to this error. For this reason I feel this will benefit others.
The following error...
The POST method is not supported for this route. Supported methods: GET, HEAD.
was caused by not clearing the routing cache
php artisan route:cache
add @method('PUT') on the form
exp:
<form action="..." method="POST">
@csrf
@method('PUT')
</form>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With