php - 如何检索旧选定复选框的数组以在 laravel 中编辑刀片?
问题描述
我面临一个错误,我想获取选定复选框的数组,它们像这样保存在数据库中 -
现在的问题是,我使用 role_id 作为 id 来访问它,这意味着当用户单击与 id = 1 关联的编辑按钮时,意味着管理员,应该在编辑页面上获取使用 role_id 1 设置的权限。编辑页面的ui是这样的:
,现在如何将所有选中的复选框检索回编辑选项并表示所有权限,无论是发布、评论、用户等。如何在刀片上显示它们?
这是编辑的控制器:
public function edit($role_id,Request $request)
{
$role_data = RolePermission::where(['role_id' => $role_id])->get();
return view('AssignPermission.edit',compact('role_data'));
}
这是刀片文件的视图?
<td class="examplelink">
<input type="checkbox" name="Permissions[]" value="PostAdd" @if (is_array(old('Permissions')) && in_array('PostAdd', old('Permissions'))) {{"checked='checked'"}}@endif>
</td>
如何将所有数据检索到编辑表单???
编辑:这是 dd($role_data->toArray()) 的结果
我将值存储为静态的,如下所示:
public function store(Request $request)
{
$data = $request->all();
$rules = array(
'Roles' => 'required',
);
$validate=Validator::make($data,$rules);
if ($validate->fails()) {
return redirect()->back()->withInput()->withErrors($validate);
}
else{
$data = $request->all();
// dd($data);
// Post CheckBox
if(in_array('PostAdd', $request->get('Permissions'))){
$PostAdd = new RolePermission;
$PostAdd->role_id = $request->Roles;
$PostAdd->Item = 'Post';
$PostAdd->Permission = 'Add';
$PostAdd->save();
}
if(in_array('PostView', $request->get('Permissions'))){
$PostView = new RolePermission;
$PostView->role_id = $request->Roles;
$PostView->Item = 'Post';
$PostView->Permission = 'View';
$PostView->save();
}
if(in_array('PostEdit', $request->get('Permissions'))){
$PostEdit = new RolePermission;
$PostEdit->role_id = $request->Roles;
$PostEdit->Item = 'Post';
$PostEdit->Permission = 'Edit';
$PostEdit->save();
}
if(in_array('PostDelete', $request->get('Permissions'))){
$PostDelete = new RolePermission;
$PostDelete->role_id = $request->Roles;
$PostDelete->Item = 'Post';
$PostDelete->Permission = 'Delete';
$PostDelete->save();
}
// Comment checkBox
if(in_array('CommentAdd', $request->get('Permissions'))){
$CommentAdd = new RolePermission;
$CommentAdd->role_id = $request->Roles;
$CommentAdd->Item = 'Comment';
$CommentAdd->Permission = 'Add';
$CommentAdd->save();
}
if(in_array('CommentView', $request->get('Permissions'))){
$CommentView = new RolePermission;
$CommentView->role_id = $request->Roles;
$CommentView->Item = 'Comment';
$CommentView->Permission = 'View';
$CommentView->save();
}
if(in_array('CommentEdit', $request->get('Permissions'))){
$CommentEdit = new RolePermission;
$CommentEdit->role_id = $request->Roles;
$CommentEdit->Item = 'Commment';
$CommentEdit->Permission = 'Edit';
$CommentEdit->save();
}
if(in_array('CommentDelete', $request->get('Permissions'))){
$CommentDelete = new RolePermission;
$CommentDelete->role_id = $request->Roles;
$CommentDelete->Item = 'Comment';
$CommentDelete->Permission = 'Delete';
$CommentDelete->save();
}
// User CheckBox
if(in_array('UserAdd', $request->get('Permissions'))){
$UserAdd = new RolePermission;
$UserAdd->role_id = $request->Roles;
$UserAdd->Item = 'User';
$UserAdd->Permission = 'Add';
$UserAdd->save();
}
if(in_array('UserView', $request->get('Permissions'))){
$UserView = new RolePermission;
$UserView->role_id = $request->Roles;
$UserView->Item = 'User';
$UserView->Permission = 'View';
$UserView->save();
}
if(in_array('UserEdit', $request->get('Permissions'))){
$UserEdit = new RolePermission;
$UserEdit->role_id = $request->Roles;
$UserEdit->Item = 'User';
$UserEdit->Permission = 'Edit';
$UserEdit->save();
}
if(in_array('UserDelete', $request->get('Permissions'))){
$UserDelete = new RolePermission;
$UserDelete->role_id = $request->Roles;
$UserDelete->Item = 'User';
$UserDelete->Permission = 'Delete';
$UserDelete->save();
}
$Message = "successfully added";
return redirect('/Admin/AssignPermission')->with('success',$Message);
}
}
让我知道??这种方法对不对??建议其他方法来存储和检索数据???
更新的代码:这是编辑的功能:
public function edit($role_id,Request $request)
{
$role_data = RolePermission::where(['role_id' => $role_id])->get()->map(function ($role){
return $role->Item.$role->Permission;
});;
return view('AssignPermission.edit',compact('role_data'));
}
这是刀片的更新代码:
<input type="checkbox" name="Permissions[]" value="PostAdd" {{is_array(old('Permissions',$role_data??[])) && in_array('PostAdd',old('Permissions',$role_data??[]))?'checked':null}} />
解决方案
您可以执行以下操作
<input type="checkbox" name="Permissions[]" value="PostAdd" {{is_array(old('Permissions',$role_data??[]))&&in_array('PostAdd',old('Permissions',$role_data??[]))?'checked':null}} />
在控制器中
$role_data = RolePermission::where(['role_id' => $role_id])->get()->map(function ($role){
return $role->Item.$role->Permission;
})->toArray();