# 建表
## 配置表
### 建表語句
~~~SQL
DROP TABLE IF EXISTS `config`;
CREATE TABLE `config`
(
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
`title` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '配置名',
`value` varchar(600) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '配置值',
`desc` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '配置描述',
`created_at` timestamp NULL DEFAULT '0000-00-00 00:00:00' COMMENT '添加時間',
`updated_at` timestamp NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新時間',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB
AUTO_INCREMENT = 1992
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci COMMENT = '配置表'
ROW_FORMAT = Dynamic;
~~~
### 代碼生成
找到后臺代碼生成 `開發工具 -> 代碼生成器` 選擇 `config` 表 勾選 `創建模型` `創建數據倉庫` `創建控制器` `創建翻譯文件`
> 后面都可以按照這種方式生成代碼
添加路由
`app\Admin\routes.php`
~~~php
...
use App\Admin\Controllers\ConfigController;
...
Route::group([
...
], function (Router $router) {
...
$router->get('/config/setting', [ConfigController::class,'setting']);
});
~~~
### 創建菜單
創建 `網站` 一級菜單 創建 `網站` 菜單的二級菜單 `系統設置` 路徑填寫 `/setting/setting`
### 創建工具表單
輸入指令
~~~bash
> php artisan admin:form Setting
~~~
### 編輯控制器
`app\Admin\Controllers\ConfigController.php`
~~~php
...
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Widgets\Card;
use App\Admin\Forms\Setting;
...
public function setting(Content $content)
{
return $content->title('系統配置')->body(new Card(new Setting()));
}
~~~
### 修改工具表單
#### 構建表單
這里的工具表單的語法和普通的表單語法一樣 [工具表單](https://learnku.com/docs/dcat-admin/2.x/tools-form/8125#183ca1)
`app/Admin/Forms/Setting.php`
~~~php
public function form()
{
$this->text('title', '網站標題')
->required();
$this->text('keyword', '網站關鍵詞')
->required();
$this->text('description', '網站描述')
->required();
$this->image('logo', '網站LOGO')
->autoUpload()
->move('/system/' . date('Ymd'))
->uniqueName()
->required();
$this->textarea('copyright', '版權')
->required();
$this->text('qq', '客服QQ')
->required();
}
~~~
增加默認值
`app/Admin/Forms/Setting.php`
~~~php
...
use App\Models\Config;
...
public function default()
{
$configModel = new Config();
return [
'title' => $configModel->getConfig('title'),
'keyword' => $configModel->getConfig('keyword'),
'description' => $configModel->getConfig('description'),
'logo' => $configModel->getConfig('logo'),
'copyright' => $configModel->getConfig('copyright'),
'qq' => $configModel->getConfig('qq'),
];
}
~~~
config模型增加根據 配置名獲取配置值的方法
`app\Models\Config.php`
~~~php
public function getConfig($title)
{
$value = self::where('title', $title)
->firstOr(function () {
return '';
});
return $value->value ?? $value;
}
~~~
添加表單處理代碼 `app\Admin\Forms\Setting.php`
~~~php
public function handle(array $input)
{
foreach ($input as $title => $value) {
$configModel = new Config();
$configModel->createOrUpdate($title, $value);
}
return $this
->response()
->success('更新成功')
->refresh();
}
~~~
增加對應的邏輯處理 `app\Models\Config.php`
~~~php
public function createOrUpdate($title = '', $value = '')
{
if ($title) {
$config = self::where('title', $title)
->first();
if ($config) {
if ($config->value !== $value) {
self::where('title', $title)
->update([
'value' => $value,
'updated_at' => date('Y-m-d H:i:s'),
]);
}
} else {
self::where('title', $title)
->insert([
'title' => $title,
'value' => $value,
'created_at' => date('Y-m-d H:i:s'),
]);
}
}
}
~~~
此時上傳表單發現 圖片可以正常上傳但是不顯示 是因為路徑不對
修改配置文件
`config\filesystems.php`
~~~php
'disks' => [
...
'admin' => [
'driver' => 'local',
'root' => public_path('uploads'),
'visibility' => 'public',
'url' => env('APP_URL').'/uploads',
],
],
~~~
`config\admin.php`
~~~php
'upload' => [
// Disk in `config/filesystem.php`.
'disk' => 'admin',
...
],
~~~
重新上傳即可