簡體   English   中英

如何從數據庫-Spatie權限包-Laravel中填充選擇選項

[英]How to populate the select opition from Database - Spatie Permission package - Laravel

我正在關注這篇文章,以介紹Spatie /權限的前端UI。

文章

我能夠理解每個部分,但無法理解特定部分,

請導航到“角色”部分,(請搜索“ role.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“,”數據透視“:{” 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>

我確信這不是實現此目標的正確方法。 請讓我知道如何在選擇字段中填充權限。

注意:如果專門討論問題,請發表評論。 這樣我可以改善我的演示文稿。 感謝您的努力。 謝謝

有幾個問題應該可以幫助您使其正常工作。 LaravelCollective表單(HTML)庫非常棒,但是還需要一點時間來適應。

控制器端,您當前正在從此行將完全權限對象列表發送回表單:

 $permissions = Permission::all();

或者,隨着作者表單的執行,他們只是從特定的$role中提取那些權限。 無論哪種方式,缺少的部分都是控制器將完整的對象發送回表單,該對象無法正常工作,因為當前已對其進行編碼。 select框僅需要nameid

因此, 控制器應使用pluck收集這些字段:

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

然后,在您的刀片頁面上,權限中的選擇將正確地與select部分對齊:

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

注意這里的幾件事- $permissions第二個參數 ,而不是第三個參數 另外,您無需指定$permission->id ,這是通過form-model-binding由Collective自動完成的。 相反,使用空,它將綁定的user ,您已經綁定到形式。 如果使用表單模型綁定,則可以使用3rd參數而不是null自己編寫:

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

表單模型綁定非常棒,它允許您像上面一樣使用null ……這並不困難-您只需要使用正確的模型打開表單即可。 這超出了此問題的范圍,但請查看“集體”文檔以獲取有關如何執行此操作的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM