管理员列表
增删该查搞起来,先搞定路由
// 管理员管理
$router->get('/admin/list', 'AdminController@lists'); // 管理员列表
$router->addRoute(['GET', 'POST'],'/admin/add', 'AdminController@add'); // 添加管理员
$router->addRoute(['GET', 'POST'],'/admin/edit/{id:[1-9]+}', 'AdminController@edit'); // 编辑管理员
$router->post('/admin/del', 'AdminController@del'); // 删除管理员
然后管理员模型,管理员模型我们之前已经建立好了,这里我们直接写个列表lists()方法
belongsToMany(Role::class, 'admin_roles', 'admin_id', 'role_id');
}
public static function lists(array $conditions, $page = 0, $perPage = 15)
{
$article = Admin::with('roles');
!empty($conditions['title']) && $article->where('title', 'like', "{$conditions['title']}%"); // 模糊匹配标题查询
$article->orderBy('id', 'DESC');
return $article->paginate($perPage, ['*'], 'page', $page);
}
}
管理员控制器
input(),$request->input('page',0));
$data['admins'] = $admins;
return view('admin.admin.list', $data);
}
}
前端代码我就不贴出来了,直接看看效果
添加管理员,先写模型
public static function add(array $adminData, array $roleData)
{
try {
DB::transaction(function () use ($adminData, $roleData) {
// 保存管理员信息
$admin = new Admin();
$admin->user_name = $adminData['user_name'];
$admin->password = password_hash($adminData['password'], PASSWORD_BCRYPT); // 生成密码,不能明文保存
$admin->email = $adminData['email'];
$admin->state = (int)$adminData['state'];
$admin->save();
// 使用attach保存管理员和角色关系信息
$admin->roles()->attach(array_values($roleData));
});
} catch (\Exception $e) {
Log::error('添加管理员信息失败,失败信息:' . $e->getMessage());
return false;
}
return true;
}
控制器中写个add方法
public function add(Request $request)
{
if($request->post()){
// todo 验证数据;验证管理员不能重复
Admin::add($request->input(),$request->input('roles'));
return $this->response->responseJSON();
}
// 角色列表
$roles = Role::lists();
$data['roles'] = $roles;
return view('admin.admin.add',$data);
}
前端页面不帖出来了,直接看效果
数据录入成功。
来看看编辑。先去模型里写个方法
public static function edit(Admin $admin, array $adminData, array $roleData)
{
try {
DB::transaction(function () use ($admin, $adminData, $roleData) {
// 编辑使用sync(),使用其它的不行,attach是添加,detach是删除。
$admin->roles()->sync(array_values($roleData));
// 更新管理员数据
!empty($adminData['user_name']) && $admin->user_name = $adminData['user_name'];
!empty($adminData['password']) && $admin->password = password_hash($adminData['password'], PASSWORD_BCRYPT); // 生成密码,不能明文保存
!empty($adminData['email']) && $admin->email = $adminData['email'];
$admin->state = (int)$adminData['state'];
$admin->update();
});
} catch (\Exception $e) {
Log::error('编辑管理员信息失败,失败信息:' . $e->getMessage());
return false;
}
return true;
}
控制器写个edit方法
public function edit(int $id, Request $request)
{
$admin = Admin::with('roles')->where('id', $id)->first();
// todo 如果数据不存在,跳转到错误页面
if ($request->post()) {
// todo 验证数据;验证是否重复
Admin::edit($admin, $request->input(), $request->input('roles'));
return $this->response->responseJSON();
}
$usedRoles = [];
foreach ($admin->roles as $item) {
array_push($usedRoles, $item->pivot->role_id);
}
// 角色列表
$roles = Role::lists();
$data['roles'] = $roles;
$data['usedRoles'] = $usedRoles;
$data['admin'] = $admin;
return view('admin.admin.edit', $data);
}
看看关系数据中的数据
多给几个角色
保存后再看看数据
再点击编辑看看
删除不介绍了,前边都有介绍,没啥技术难度。
完。