[英]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
框僅需要name
和id
。
因此, 控制器應使用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.