【问题标题】:How to populate the select opition from Database - Spatie Permission package - Laravel如何从数据库填充选择选项 - Spatie 权限包 - Laravel
【发布时间】:2019-12-12 06:18:37
【问题描述】:

我一直在关注这篇文章,以调出 Spatie/权限的前端 UI。

article

我能理解每个部分,但我无法理解特定部分,

请导航到角色部分,(请搜索“roles.edit”,它将直接进入该部分)

在编辑视图中作者正在使用代码,

<h5><b>Assign Permissions</b></h5>
    @foreach ($permissions as $permission)
        {{Form::checkbox('permissions[]',  $permission->id, $role->permissions ) }}
        {{Form::label($permission->name, ucfirst($permission->name)) }}<br>
    @endforeach

我的理解是表单集合使用第三个参数作为检查字段。

当我运行传递给第三个字段的输出时

{{$role->权限 }}

我得到了这种格式的结果

[{"id":1,"name":"Permission","guard_name":"web","created_at":"2019-08-04 05:53:14","updated_at":"2019-08-04 05:53:14","pivot":{"role_id":9,"permission_id":1}},

我不确定 laravel 集体如何解析结果。

用于编辑的作者控制器

 public function edit($id) {
        $role = Role::findOrFail($id);
        $permissions = Permission::all();
        return view('roles.edit', compact('role', 'permissions'));
    }

这是我克服这个问题的方法,顺便说一句,我没有使用集体

我的编辑控制器

 public function edit($id)
    {
        $role = Role::find($id);
        $roles_permissions = Role::findByName($role->name)->permissions;
        $permissions = Permission::all();

        return view('admin.userrole.role.edit', compact('role', 'permissions','roles_permissions'));
    }

我的刀片文件

<h4>Assign Permission</h4>
        <div class='form-group'>
            <p>
                Existing Permissions:
                @foreach ($roles_permissions as $item)
                <span class="badge badge-success"> {{$item->name}}</span>
                @endforeach
            </p>
            <p> {{$role->permissions}}</p>
            <select name="permissions[]" id="permissions" multiple class="form-control">
                @foreach ($roles_permissions as $item)
                <option value="{{$item->id}}" selected hidden></option>
                <span class="badge badge-success"> {{$item->name}}</span>
                @endforeach
                <option value="" selected>
                </option>
                @foreach ($permissions as $permission)
                <option value="{{$permission->id}}" checked="{{$role->permissions}}">{!!ucfirst($permission->name)!!}
                </option>
                @endforeach
            </select>
        </div>

我确信这不是实现这一目标的正确方法。请让我知道如何在 选择字段。

注意:如果提出问题,请评论为什么。这样我就可以改进我的演示文稿。我很感激你的努力。谢谢

【问题讨论】:

    标签: php laravel laravelcollective laravel-permission


    【解决方案1】:

    有几个问题可以帮助您完成这项工作。 LaravelCollective 表单 (HTML) 库非常棒,但也需要一点时间来适应。

    controller 方面,您当前正在从该行将完整权限对象列表发送回表单:

     $permissions = Permission::all();
    

    或者,正如作者的表单所做的那样,他们只是从特定的$role 中提取这些权限。无论哪种方式,缺少的部分是控制器将完整的对象发送回表单,这在当前编码时将无法工作。 select 框只需要 nameid

    所以 控制器 应该使用 pluck 只收集这些字段:

     $permissions = Permission::orderBy('name')->pluck('name', 'id');
    

    然后,在您的 blade 页面上,权限选项将与选择部分正确对齐:

    {{Form::select('permissions[]', $permissions, null, [//classes, placeholder, multiple, etc] ) }}
    

    请注意这里的一些事情 - $permissions第二个参数,而不是第三个。此外,您不需要指定$permission-&gt;id,这是通过form-model-binding 使用集体自动完成的。相反,使用 null 它将绑定到您已绑定到表单的 user。如果您使用表单模型绑定,则可以使用第三个参数而不是null自己编写:

     {{Form::select('permissions[]', $permissions, (isset($user->permission_id)? $user->permission_id: [null=>'Please Select']), [//classes, placeholder, multiple etc] ) }}
    

    表单模型绑定非常棒,并且允许您像上面一样使用null...这并不难 - 您只需要使用正确的模型打开表单即可。这超出了此问题的范围,但请查看集体文档以获取有关如何执行此操作的示例。

    【讨论】:

    • 感谢您的详细记录。我正在使用 laravel 5.8 并试图避免使用集体,因为它的支持有限。如果你不介意的话,请用正常的形式给我解释一下。
    • 我在回答中使用了 Collective,因为这是您在问题中展示的示例中使用的内容,以及教程文章中使用的内容。我强烈建议为此使用 Collective,因为它与库使用的东西相匹配 - Collective 的 other 产品支持有限。然而,HTML(表单)每天有近 16K 的下载量并且得到绝对支持 - 它并不完美,但它的使用极为广泛且非常有用。
    • 谢谢你:)。我的申请中有大约 100 份表格。截至目前,将保留旧的完整并从现在开始使用集体。需要将它们全部迁移到集体。相当大的任务
    • 这可能是值得的 - 特别是如果你使用表单 - 模型绑定。这将使生活更轻松。如果您能将答案标记为正确,我将不胜感激,因为这将解决您的问题:)
    • 非常感谢您抽出宝贵的时间,我真的很感激。我被告知不应该使用collective :(。如果你能分享任何以常规形式完成相同模型绑定的文章,我将不胜感激。因为我只是不想盲目地遵循一个包。
    猜你喜欢
    • 2016-05-27
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2021-12-24
    • 1970-01-01
    • 2019-05-08
    • 2017-09-13
    相关资源
    最近更新 更多