Php 如何从数据库填充select opition-空间权限包-Laravel

Php 如何从数据库填充select opition-空间权限包-Laravel,php,laravel,laravelcollective,spatie,Php,Laravel,Laravelcollective,Spatie,我在阅读这篇文章之后,为空间/权限打开了前端UI 我能理解每一部分,但我不能理解具体的部分 请导航到角色部分,(请搜索“角色。编辑”,它将直接进入该部分) 在编辑视图中,作者正在使用代码 <h5><b>Assign Permissions</b></h5> @foreach ($permissions as $permission) {{Form::checkbox('permissions[]', $permissio

我在阅读这篇文章之后,为空间/权限打开了前端UI

我能理解每一部分,但我不能理解具体的部分

请导航到角色部分,(请搜索“角色。编辑”,它将直接进入该部分)

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

<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
这里是我如何克服这一点,顺便说一句,我没有使用集体

我的编辑控制器

 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>
分配权限

现有权限:
@foreach($roles\u权限为$item)
{{$item->name}
@endforeach

{{$role->permissions}

@foreach($roles\u权限为$item) {{$item->name} @endforeach @foreach($permissions作为$permission) {!!ucfirst($permission->name)!!} @endforeach
我确信这不是实现这一目标的正确途径。请务必让我知道如何在中填充权限 选择字段


注意:如果你想回答这个问题,请务必给出一个解释。这样我才能改进我的演讲。我非常感谢你的努力。谢谢

有几个问题可以帮助您实现这一目标。LaravelCollective表单(HTML)库非常棒,但也需要一点时间来适应

控制器端,您当前正在从此行将完全权限对象列表发送回表单:

 $permissions = Permission::all();
或者,当作者的表单执行此操作时,他们只是从特定的
$role
中提取这些权限。不管是哪种方式,缺少的部分是控制器正在将完整对象发送回表单,该表单将无法按照当前编码的方式工作。
select
框只需要
name
id

因此,控制器应使用Pull仅收集这些字段:

 $permissions = Permission::orderBy('name')->pluck('name', 'id');
然后,在您的刀片页面上,权限中的选项将与选择部分正确对齐:

{{Form::select('permissions[]', $permissions, null, [//classes, placeholder, multiple, etc] ) }}
注意这里的几点,
$permissions
是第二个参数,而不是第三个参数。另外,您不需要指定
$permission->id
,这是通过
表单模型绑定通过集合自动完成的。相反,使用null,它将绑定到您已绑定到表单的
用户
。如果未使用表单模型绑定,则可以使用第三个参数(而不是
null
)自己编写:

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

表单模型绑定非常棒,允许您如上所述使用
null
。。。这并不难-你只需要用正确的模型打开表单。这超出了本问题的范围,但请查看集合文档中有关如何执行的示例。

感谢您的详细介绍。。我使用的是Laravel5.8,由于它的支持有限,我试图避免使用collective。如果你不介意的话,请你用正规形式给我解释一下。我在回答中使用了集体,因为你在问题中展示的例子中使用了集体,教程文章也使用了集体。我强烈建议使用Collective,因为它与库使用的内容相匹配——Collective的其他产品支持有限。然而,HTML(表单)每天有近16K的下载量,并且得到了绝对的支持——它并不完美,但它的应用非常广泛,非常有用。谢谢:)。我有大约100张申请表。从现在起,将保留旧的一个完整的,并从现在开始使用集体。需要将它们全部迁移到集体。相当大的任务它可能值得付出努力——特别是如果您使用表单模型绑定。这将使生活更轻松。如果您能将答案标记为正确,我将不胜感激,因为这将解决您的问题:)非常感谢您抽出时间,我非常感谢。我被告知不应该使用集体:(.我非常感谢你能给我分享任何以常规形式进行相同模型绑定的艺术品。因为我只是不想盲目地遵循一个包装。
 {{Form::select('permissions[]', $permissions, (isset($user->permission_id)? $user->permission_id: [null=>'Please Select']), [//classes, placeholder, multiple etc] ) }}