[英]Laravel 4 - Repopulating form for edit with multiple check boxes
我很难弄清楚如何重新填充其中带有复选框的编辑表单。 我认为最令人困惑的部分是因为它们来自数据透视表。
我有用户,权限和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);
}
我真的需要一些有关如何解决此问题的指导。 谢谢
最近,我进行了类似的工作,不同的是,我给组分配了权限,然后将用户分配给了这些组。 例如,对于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语句。
不幸的是,我找不到更好的方法来实现这一目标。 我希望这可以帮助你。
PS:作为旁注,我实际上已经编写了一个有关如何使用Laravel创建健壮且简单的ACL的教程,如果您愿意,我可以进行链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.