如何用用户角色填充每个复选框?愚蠢的事情要坚持下去,但是任何事情都会有所帮助。
$userRoles
正在使用所有用户及其角色打印JSON
$total_row = $data->count();
$output = "";
if ($total_row > 0) {
foreach ($data as $row) {
$roleNames = '';
$userRoles = $row->roles;
$checked = '';
foreach (Role::all() as $roles1) {
if (in_array($roles1, (array)$userRoles)) {
$checked = 'checked="checked"';
}
$roleNames .= $roles1->role != null ? $roles1->role.' '.'<input type="checkbox" '.$checked.' name="role" value="'.$roles1->id.'" class="checkbox" id="checkboxId">'.' ' : '';
}
$output .= '
<tr>
<td>'.$row->surname.'</td>
<td>'.$row->name.'</td>
<td>'.$row->phone.'</td>
<td>'.$roleNames.'</td>
<td>'.$userRoles.'</td>
<td><button type="button" id="rowId" class="remove-button btn btn-danger" data-id="'.$row->id.'">
<div class="close">x</div>
</button></td>
</tr>
';
}
答案 0 :(得分:0)
正如其他人所提到的,您的复选框的name
和id
属性中存在错误,因为当前它们始终是相同的。但是,这里存在一个更大,更险恶的问题。
$checked = '';
foreach (Role::all() as $roles1) {
if (in_array($roles1, (array)$userRoles)) {
$checked = 'checked="checked"';
}
$roleNames .= $roles1->role != null ? $roles1->role . ' ' . '<input type="checkbox" ' . $checked . ' name="role" value="' . $roles1->id . '" class="checkbox" id="checkboxId">' . ' ' : '';
}
此代码块遍历所有角色,如果用户具有角色,则用字符串更新$checked
变量。问题是,$checked
变量在循环的 中。因此,如果在第一次迭代中通过了真实性测试,它将变量更新为字符串'checked =“ checked”',但是如果所有其他角色均未通过,则它们不会将变量更改为空,因此所有检查框将被选中。
在不了解角色的json结构是什么的情况下,这大约是我所能评论的。