故事背景
由于项目更换了负责人,新的决策是后台需要重构,弃用原来layui+jsonp+lumen的前后端分离架构设计,
采用laravel-admin 快速部署后台,初次接触这个开箱式的工具类去搭建后台,发现有诸多的坑需要填补,
所以从这篇文章开始,将自己近半个月多来的收获进行总结。
在此过程中我会通过将代码分块解说,在文末附上完整代码进行叙述。
本篇内容
实现后台的网站设置功能,大致的功能如下:
代码部分
首先是配置路由
app\Admin\routes.php
//基础设置
$router->get('setting', 'SettingController@index');
//基础设置更新
$router->post('setting/save', 'SettingController@save');
``
接下来是控制器
laravel-admin的控制器都是在APP的Admin文件夹下,
控制器的方法渲染的列表是通过基类的index去转发到grid方法
grid是用来显示列表的
但是我们这个页面很明显是显示表单的
所以控制器创建之后 需要重写基类的index方法
public function index(Content $content)
{
return $content
->title($this->title())
->description($this->description['index'] ?? trans('admin.list'))
->body($this->form());//这里调用之后 相当于访问到这个控制器的时候 就直接显示表单页面 而不是列表页面
}
表单部分的显示数据处理
/**
* Make a form builder.
* 显示基础设置页面
* @return Form
*/
public function form()
{
//因为是表单 所以就需要调用到Form的类 里面调用的是当前这个业务的查询主表
$form = new Form(new SettingModel());
//这里是设置页面的头部信息
$form->setTitle(' ');
//将查到的数据进行遍历
$lists = SettingModel::query()->get()->toArray();
foreach ($lists as $list) {
//key是表单里面对应的设置类别 name是表单里面的中文名字 value是设置项的值
//比如 key是“logo” name是“图片” value="图片的地址"
$form->select($list['key'], $list['name'])->options($switchStatus)->value($list['value'])->rules('required');
}
}
//配置提交路由
$form->setAction('setting/save');
return $form;
}
以上的代码并非真正属于 laravel-admin的渲染表单页面的正确写法,之所以采取这种写法是因为这个网站设置表的数据形式问题,每个配置是一条数据,所以才需要这样子去渲染!
表单部分的提交保存处理
在上面的代码块中,配置了提交的路由$form->setAction('setting/save');
所以这里是进行保存的逻辑,这里没有什么好说的,处理的方式跟laravel自带的语法一模一样,只是多了个上传照片的处理
/**
* 更新基础设置
* @param Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function save(Request $request)
{
//获取提交过来的参数
$params = $request->all();
//如果提交过来的参数中没有有照片的数据
if (!isset($params['logo'])) {
$logoName = SettingModel::query()->where('key', '=', 'logo')->value('value');
}else {//如果有上传照片 进行处理
$logoName = (new Form\Field\Image('logo', '公司LOGO'))->uniqueName()->prepare($params['logo']);
}
//进行更新数据
foreach ($params as $key => $param) {
if ($key == 'logo') {
SettingModel::query()
->where('key', '=', $key)
->update(['value' => $logoName]);
} else {
SettingModel::query()
->where('key', '=', $key)
->update(['value' => $param]);
}
}
//这个地方是 处理成功之后 反馈给前端的弹窗样式 如果是失败 只需要把success改成error
admin_toastr('更新成功', 'success');
return back();
}
至此,后台网站设置的功能就完成了,方便的就是完全不需要去考虑页面如果编写,拿来就用,虽然有局限性,但是在此功能的完成中,算是很快的就做完。
觉得有用的点个赞加个关注吧!
有问题的欢迎在评论区留言!