laravel-admin实现后台网站设置功能

故事背景

由于项目更换了负责人,新的决策是后台需要重构,弃用原来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();
}

至此,后台网站设置的功能就完成了,方便的就是完全不需要去考虑页面如果编写,拿来就用,虽然有局限性,但是在此功能的完成中,算是很快的就做完。


觉得有用的点个赞加个关注吧!
有问题的欢迎在评论区留言!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章