Laravel 5.4更新方法

时间:2018-07-13 23:12:07

标签: php laravel

我正在尝试更新数据库中的记录。这是一个特定元素,是另一个元素。这是我的代码,它不起作用:/

web.php:

 Route::patch('/projects/{projectID}/{id}', 'ProjectsController@update');

控制器:

public function update($projectId, $id, CreateProjectRequest $request)
    {
        $page = Page::findOrFail($id);
        $page->update([
           'name' => $request->name,
       ]);

       return redirect('/projects/' . $projectId);
    }

HTML:

{!! Form::model($page, ['method'=>'PATCH', 'action' => ['ProjectsController@update', $project->id, $page->id]]) !!}

  {!! Form::text('name',null,['class'=>'blue-inp']) !!}

 {!! Form::submit('Save changes',['class'=>'btn btn-save-blue']) !!}

 {!! Form::close() !!}

2 个答案:

答案 0 :(得分:0)

您只需要在控制器更新方法中为CreateProjectRequest切换类类型提示Request

然后可以像这样访问从表单输入字段传递的变量:

$name = $request->input('name');

有关该主题的更多信息:https://laravel.com/docs/5.0/requests

答案 1 :(得分:0)

您可以简化控制器方法,假设CreateProjectRequest处理了所有必要的验证,并且其输入与您要更新的输入匹配 编辑:我更喜欢使用带有规则的formrequests验证所有内容,并且当它到达控制器时,它只是调用服务或执行操作。 就命名约定而言,您可能无需在url参数中发送$ id并将其发送到正文中,以避免在formrequest中使用Request来验证它是否存在于数据库中

public function update($projectId, $id, CreateProjectRequest $request)
{
    $data = $request->validated();
    Page::findOrFail($id)->update($data);

    return redirect('/projects/' . $projectId);
}