【发布时间】:2018-09-04 06:46:45
【问题描述】:
要求是更新用户角色。角色可以为空(留空)、一个或多个,如表单字段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 中是否有一种 eloquent* 的方式来查找/列出来自 Request 对象的表单文件?
[PS:尝试另一个隐藏字段或做一些前端jQuery将不受欢迎]
【问题讨论】:
-
我认为 isset($request->roles) 可以很好地检查是否有任何角色从表单提交
-
你试过了吗? $request->has('roles')
-
$request->has('roles')给出了相同的结果! -
isset($request->roles)说真或假,我怎么知道什么时候有一个字段但仍然是空的? @ashokpoudel -
请记住检查答案是否正确,以便问题关闭,其他用户可以将答案识别为他们问题的解决方案。谢谢。
标签: php laravel validation laravel-5 postdata