如何从数据库填充选择选项 - Spatie 权限包 - Laravel

我正在关注这篇文章,为 Spatie/permissions 提供前端 UI。

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

请导航到角色部分,(请搜索“ 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

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


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


{{$角色->权限}}


我得到这种格式的结果


[{"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>


            </select>

        </div>

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


注意:如果提出问题,请发表评论为什么。这样我就可以改进我的演讲。我很欣赏你的努力。谢谢


一只名叫tom的猫
浏览 110回答 1
1回答

不负相思意

有几个问题应该可以帮助您完成这项工作。LaravelCollective 表单 (HTML) 库很棒,但也需要一点时间来适应。在控制器端,您当前正在从这一行将完整权限对象列表发送回表单:&nbsp;$permissions&nbsp;=&nbsp;Permission::all();或者,当作者的表单这样做时,他们只是从特定的$role.&nbsp;无论哪种方式,缺少的部分是控制器将完整的对象发送回表单,这将无法正常工作,因为它当前是编码的。该select盒只需再name和id。所以控制器应该只使用 pluck 收集这些字段:&nbsp;$permissions&nbsp;=&nbsp;Permission::orderBy('name')->pluck('name',&nbsp;'id');然后,在您的刀片页面上,权限中的选项将与选择部分正确对齐:{{Form::select('permissions[]',&nbsp;$permissions,&nbsp;null,&nbsp;[//classes,&nbsp;placeholder,&nbsp;multiple,&nbsp;etc]&nbsp;)&nbsp;}}注意这里的一些事情 -$permissions是第二个参数,而不是第三个。此外,您不需要指定$permission->id,这是通过集体自动完成的form-model-binding。相反,使用 null 它将绑定user到您绑定到表单的那个。如果您不使用表单模型绑定,您可以使用第三个参数代替null:&nbsp;{{Form::select('permissions[]',&nbsp;$permissions,&nbsp;(isset($user->permission_id)?&nbsp;$user->permission_id:&nbsp;[null=>'Please&nbsp;Select']),&nbsp;[//classes,&nbsp;placeholder,&nbsp;multiple&nbsp;etc]&nbsp;)&nbsp;}}表单模型绑定非常棒,允许您null按上述方式使用……这并不难 - 您只需要使用正确的模型打开表单即可。这超出了本问题的范围,但请查看集体文档以获取有关如何执行此操作的示例。
打开App,查看更多内容
随时随地看视频慕课网APP