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();
}

至此,後臺網站設置的功能就完成了,方便的就是完全不需要去考慮頁面如果編寫,拿來就用,雖然有侷限性,但是在此功能的完成中,算是很快的就做完。


覺得有用的點個贊加個關注吧!
有問題的歡迎在評論區留言!

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