要求是更新用户角色.角色可以为空(留空),一个或多个,如表单字段roles []中所提供.
这是视图形式:
@foreach ($roles as $role)
<div class="checkbox">
<label><input name="roles[]" type="checkbox" value="{{$role->id}}" {{ $user->roles->contains($role->id) ? 'checked' : '' }}>{{$role->name}}</label>
</div>
@endforeach
UserController :: update()中的条件是:
if ($request->roles) {
// update user roles
}
除了一个案例,一切正常.有时用户必须没有任何角色.
if($request-> roles),isset($request-> roles)和!empty($request-> roles)..都给出了相同的老式回复(null,”,true / flase ).
案例:当分配了一个或多个角色时:
+request: ParameterBag {#41 ▼
#parameters: array:6 [▼
"_method" => "PUT"
"_token" => "a8oIPQFBMbhjanikX8v83qeOcfRE0N4UKTcTQDig"
"name" => "New User Name"
"email" => "newuser@testserver.asap"
"password" => ""
"roles" => array:2 [▼
0 => "2"
1 => "3"
]
]
}
案例:当没有分配角色或需要删除(分离)先前分配的角色时:
+request: ParameterBag {#41 ▼
#parameters: array:5 [▼
"_method" => "PUT"
"_token" => "a8oIPQFBMbhjanikX8v83qeOcfRE0N4UKTcTQDig"
"name" => "New User Name"
"email" => "newuser@testserver.asap"
"password" => ""
]
}
所以问题(要求)是:
如何区分HTML Post表单的字段值是否已提交为空(在此处未选中)或视图表单中是否存在此类字段?
在Laravel中是否有一种雄辩的方法来从Request对象中查找/列出表单文件?
[PS:尝试另一个隐藏的领域或做一些前端jQuery将不被赞赏]
解决方法:
您需要在应用程序的设计中识别此问题.
How to differentiate when the field value of an HTML Post form has been submitted as empty(unchecked here) or if there was no such a field in the view form? Is there an eloquent* way in Laravel to find/list the form fileds from the Request object?
该形式何时不应该有角色[]字段?您应该有一个标记,告诉您的应用程序该表单没有roles []字段.
类似的是,当普通用户更新他/她的个人资料时使用此表单时,他/她将无法更新他/她的角色.
因为您的问题确实是表单的默认行为,如本问题所述:Submit an HTML form with empty checkboxes
因此,对于没有角色字段和具有角色字段的表单的不同过程的表单,将存在不同的过程.
要添加到您的实现,您可以检索角色字段,如下所示:
$roles = $request->input('roles', []);
之后,您可以使用同步到模型的关系方法.
$user->roles()->sync($roles);