我很难弄清楚如何重新填充包含复选框的编辑表单。我认为最令人困惑的部分是因为它们来自数据透视表。
我有用户,权限和users_permissions表。
为了快速演示表格的样子,我运行了这个查询并包含了结果的屏幕截图。
return $userPermissions = User::with('permissions')->find($id);
在我的表单中,我现在只有两个权限复选框,直到我得到概念工作,然后我将添加一个foreach循环并从数据库中获取所有这些,但现在我有以下内容:
<div class="form-group">
<label>
{{ Form::hidden('permissions[4]', '0', ['class' => 'checkbox-inline']) }}
{{ Form::checkbox('permissions[4]', '1', ['class' => 'checkbox-inline']) }}
Manage Content
</label>
</div>
<div class="form-group">
<label>
{{ Form::hidden('permissions[3]', '0', ['class' => 'checkbox-inline']) }}
{{ Form::checkbox('permissions[3]', '1', ['class' => 'checkbox-inline']) }}
Manage Users
</label>
</div>
我不确定这是否是有用的信息,但是当我第一次创建用户时,我创建了一个权限数组以附加到新用户。这是代码,
public function createUserPermissionsArray($input)
{
$permissionsArray = [];
$permissions = $input['permissions'];
foreach ($permissions as $id => $value)
{
if ($value == 1)
{
array_push($permissionsArray, $id);
}
}
$this->saveNewUserToDatabase($input, $permissionsArray);
}
我真的需要一些关于如何解决这个问题的方向。感谢
答案 0 :(得分:0)
我最近在类似的东西上工作,除了我有分配了权限的组,然后分配给哪些用户。例如,对于GroupController::edit()
我有这段代码:
public function edit($id)
{
if(!permitted('group.edit')) {
return Redirect::route('user.dashboard');
}
$group = Group::find($id);
$permissions = Permission::all();
return View::make('admin.group.edit', [
'group' => $group,
'permissions' => $permissions,
'assigned' => $group->permissions->lists('id')
]);
}
然后在视图(admin.group.partials.form
)的部分形式中,我有以下代码来处理权限:
@foreach($permissions as $permission)
<div class="row">
@if(isset($assigned))
{{ Form::checkbox(
'permissions[' . $permission->ident .']',
$permission->id,
in_array($permission->id, $assigned))
}}<label for="permissions">{{ $permission->ident }} - {{ $permission->description }}</label>
@else
{{ Form::checkbox(
'permissions[' . $permission->ident .']',
$permission->id)
}}<label for="group">{{ $permission->ident }} - {{ $permission->description }}</label>
@endif
</div>
@endforeach
我已尽力将其格式化,以便于阅读。基本上我有一个create.blade.php
和edit.blade.php
都包含表单部分,但每个文件处理表单的打开和关闭(模型绑定编辑,普通打开创建),因此if语句。
不幸的是,我无法找到更好的方法来实现这一目标。我希望这会对你有所帮助。
P.S:作为旁注,我实际上写了一篇关于使用Laravel创建一个健壮且简单的ACL的教程,如果你愿意,我可以链接。