我的编辑页面有问题。当我提交时出现此错误:此路由不支持POST方法。支持的方法:GET,HEAD。我不知道它来自哪里,因为我对laravel很陌生。
路线(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');
});
Run Code Online (Sandbox Code Playgroud)
控制器:
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');
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激。
形成:
sto*_*2m1 32
我知道这不是 OP 帖子的解决方案。但是,当我搜索此错误的答案时,这篇文章是 Google 索引的第一篇文章。出于这个原因,我觉得这将使其他人受益。
以下错误...
此路由不支持 POST 方法。支持的方法:GET、HEAD。
是因为没有清除路由缓存
php artisan route:cache
Run Code Online (Sandbox Code Playgroud)
小智 6
我在 web.php 中看到你的代码如下:
Route::post('/edit/{id}','ProjectController@update');
Run Code Online (Sandbox Code Playgroud)
第 1 步:删除 {id} 随机参数,如下所示:
Route::post('/edit','ProjectController@update');
第 2 步:然后删除表单中的 @method('PUT'),假设我们只是简单地使用POST方法
那么如何将 ID 传递给我的方法呢?
第 1 步:例如在您的表单中使用 hidden 属性创建一个输入字段
<input type="hidden" value="{{$project->id}}" name="id">
第 2 步:在控制器的更新方法中,获取该 ID,例如:
$id = $request->input('id');
Run Code Online (Sandbox Code Playgroud)
那么您可能无法使用它来查找要编辑的项目
$project = Project::find($id)
//OR
$project = Project::where('id',$id);
Run Code Online (Sandbox Code Playgroud)
小智 6
在表单上添加@method('PUT')
经验:
<form action="..." method="POST">
@csrf
@method('PUT')
</form>
Run Code Online (Sandbox Code Playgroud)
您可以通过多种方式处理此问题:
如果您坚持使用PUT,则可以将form操作更改为,POST并添加一个method_field具有值PUT的隐藏项和一个隐藏的csrf字段(如果您使用的是Blade,则只需添加@csrf_field和{{ method_field('PUT') }})。这样,表单将接受请求。
您只需将route和form方法更改为即可POST。因为您是定义路由而不使用资源组的人,所以它将很好地工作。
我刚刚删除了 url 末尾的斜杠,它开始工作......
/managers/games/id/push/到:
$http({
method: 'POST',
url: "/managers/games/id/push",
Run Code Online (Sandbox Code Playgroud)
这可能与升级到 Laravel 5.8 有关?