Laravel 5.5从视图传递到更新方法时更新丢失的对象

时间:2018-02-01 10:28:28

标签: php laravel laravel-5 blade laravel-blade

我在尝试更新一个简单的实体时生气,我已经看到当我将更新方法的参数Role $role更改为int $id并生成{{ 1}}在更新之前,它可以工作,但似乎我的刀片findOrFail没有将我的对象for::open传递给我的控制器。 我已经尝试在我的编辑裁剪模板中将其传递出去:

$role

或者像这样:

{{ Form::open(['name'=>'editrole','method'=> 'put','route'=>['Role.update',$role],
                    'class'=>'mt-4 ml-2']) }} 

这里是更新方法:

{{ Form::open(['name'=>'editrole','method'=> 'put','url'=>route('Role.update',$role),
                    'class'=>'mt-4 ml-2']) }}

在更新方法中创建public function update(RoleRequest $request, Role $role) { try{ //dd($role); $role->update($request->all()); return redirect(route('Role.index'))->with('success_message','Rôle modifié'); }catch (ModelNotFoundException $ex){ return redirect(route('Role.index'))->with('error_message', 'Erreur : '.$ex->getMessage().'<br />'.$ex->getTraceAsString()); } } 属性为空时 谢谢你的帮助。

路线是这样的:

dd($role)

1 个答案:

答案 0 :(得分:0)

您无法将对象作为路径参数传递。如上所述使用id,然后在各个表单字段中设置对象属性。

你不需要try catch,因为如果路由模型绑定失败,404将在它到达你的方法之前发生。

public function update(RoleRequest $request, Role $role) {
    $role->update($request->all());
    return redirect(route('Role.index'))->with('success_message','Rôle modifié');
}

编辑:

所有这些都在Implicit Binding部分中解释:

https://laravel.com/docs/5.5/routing#route-model-binding