Laravel 4 - 使用多个复选框重新填充表单进行编辑

时间:2014-05-02 17:27:19

标签: php mysql forms laravel laravel-4

我很难弄清楚如何重新填充包含复选框的编辑表单。我认为最令人困惑的部分是因为它们来自数据透视表。

我有用户,权限和users_permissions表。

为了快速演示表格的样子,我运行了这个查询并包含了结果的屏幕截图。

return $userPermissions = User::with('permissions')->find($id);

Output of users table with permissions

在我的表单中,我现在只有两个权限复选框,直到我得到概念工作,然后我将添加一个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);

}

我真的需要一些关于如何解决这个问题的方向。感谢

1 个答案:

答案 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.phpedit.blade.php都包含表单部分,但每个文件处理表单的打开和关闭(模型绑定编辑,普通打开创建),因此if语句。

不幸的是,我无法找到更好的方法来实现这一目标。我希望这会对你有所帮助。

P.S:作为旁注,我实际上写了一篇关于使用Laravel创建一个健壮且简单的ACL的教程,如果你愿意,我可以链接。