在非对象上调用成员函数function()


L5: Call to a member function function() on a non-object

获得一个具有__contruct函数的资源控制器来声明$project

 public function __construct(Project $project){
    $this->project = $project;
}

然后我有一个update和一个destroy函数,给出一个Call to a member function delete() on a non-object (or update() error)

 public function edit($id)
{
    $project = $this->project->find($id);
    return view('project.edit', ['project' => $project, 'id' => 'edit']);
}

public function update(CreateProjectRequest $request, $project)
{
    $project->fill($request->input())->save();
    return redirect('project/index');
}

public function destroy($project)
{
    $project->delete();
    return redirect('project');
}

我做错了什么?

$project在本例中只是项目的id。你必须先加载它:

public function destroy($projectId)
{
    $project = $this->project->findOrFail($projectId);
    $project->delete();
    return redirect('project');
}

或者直接使用以键为参数的destroy方法:

public function destroy($projectId)
{
    $this->project->destroy($projectId);
    return redirect('project');
}

您可能还想查看路由模型绑定,以便从DB中自动获取模型。