故事背景
由於項目更換了負責人,新的決策是後臺需要重構,棄用原來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();
}
至此,後臺網站設置的功能就完成了,方便的就是完全不需要去考慮頁面如果編寫,拿來就用,雖然有侷限性,但是在此功能的完成中,算是很快的就做完。
覺得有用的點個贊加個關注吧!
有問題的歡迎在評論區留言!