【问题标题】:Laravel 4 - Repopulating form for edit with multiple check boxesLaravel 4 - 使用多个复选框重新填充表单以进行编辑
【发布时间】:2014-06-19 11:13:15
【问题描述】:

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

我有用户、权限和 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);

}

我真的需要一些关于如何解决这个问题的指导。谢谢

【问题讨论】:

    标签: php mysql forms laravel laravel-4


    【解决方案1】:

    我最近在做类似的事情,除了我有分配给他们权限的组,然后将用户分配给这些组。例如,对于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 的教程,如果你愿意,我可以链接。

    【讨论】:

    • 如果您查看第一段代码,您会看到我传入'assigned' =&gt; $group-&gt;permissions-&gt;lists('id') 的数据,它基本上只是创建了一个数组,其中包含分配给组。
    • 非常感谢,非常感谢。是的,我认为它是 $assigned 变量,再次感谢。
    • 没问题,很高兴能帮上忙。 ACL教程是ollieread.com/blog/2014/03/18/a-simplified-laravel-acl如果你想看看
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多