## 思路
比較簡單
一:提交驗證器驗證
二:插入到數據表 `admin_menu`
三:插入到 `auth_rule` 表(可選)
四:導出到 `admin_menu.php` 語言包!(可選)
## 代碼
>特別注意下邊的注釋代碼
>`注釋一`的代碼是為了寫入到 `auth_rule` 表當中的,如果想寫入的話,這里可以把注釋去掉,如果不用可以刪除!
>`注釋二` 的代碼是為了導出語言包的!如果不用可以刪除!導出需要方法 `_exportAppMenuDefaultLang`!
```
<?php
namespace app\agent\controller;
use think\Controller;
use think\Db;
class MenuController extends Controller
{
/**
* 后臺菜單添加提交保存
*/
public function addPost()
{
if ($this->request->isPost()) {
$result = $this->validate($this->request->param(), 'AdminMenu');
if ($result !== true) {
$this->error($result);
} else {
$data = $this->request->param();
Db::name('AdminMenu')->strict(false)->field(true)->insert($data);
// 注釋一:這里寫入到 auth_rule 表
// $app = $this->request->param("app");
// $controller = $this->request->param("controller");
// $action = $this->request->param("action");
// $param = $this->request->param("param");
// $authRuleName = "$app/$controller/$action";
// $menuName = $this->request->param("name");
// $findAuthRuleCount = Db::name('AuthRule')->where([
// 'app' => $app,
// 'name' => $authRuleName,
// 'type' => 'admin_url'
// ])->count();
// if (empty($findAuthRuleCount)) {
// Db::name('AuthRule')->insert([
// "name" => $authRuleName,
// "app" => $app,
// "type" => "admin_url",
// "title" => $menuName,
// 'param' => $param,
// ]);
// }
$sessionAdminMenuIndex = session('admin_menu_index');
$to = empty($sessionAdminMenuIndex) ? "Menu/index" : $sessionAdminMenuIndex;
// 注釋二:這里導出表
// $this->_exportAppMenuDefaultLang();
$this->success("添加成功!", url($to));
}
}
}
}
```
## 導出后臺菜單語言包方法
```
/**
* 導出后臺菜單語言包
*/
private function _exportAppMenuDefaultLang()
{
$menus = Db::name('AdminMenu')->order(["app" => "ASC", "controller" => "ASC", "action" => "ASC"])->select();
$langDir = config('DEFAULT_LANG');
$adminMenuLang = CMF_ROOT . "data/lang/" . $langDir . "/admin_menu.php";
if (!empty($adminMenuLang) && !file_exists_case($adminMenuLang)) {
mkdir(dirname($adminMenuLang), 0777, true);
}
$lang = [];
foreach ($menus as $menu) {
$lang_key = strtoupper($menu['app'] . '_' . $menu['controller'] . '_' . $menu['action']);
$lang[$lang_key] = $menu['name'];
}
$langStr = var_export($lang, true);
$langStr = preg_replace("/\s+\d+\s=>\s(\n|\r)/", "\n", $langStr);
if (!empty($adminMenuLang)) {
file_put_contents($adminMenuLang, "<?php\nreturn $langStr;");
}
}
```
>問一:那數據導出到哪了?
答:在 /data/lang/zh-cn/admin_menu.php 中

>問二:數據表及文件數據格式是什么呢?
答:如圖:
1、操作完成列表顯示

2、數據庫

3、admin_menu.php 文件

- 附錄
- 邏輯與數據模型
- HTML約定-bootstrap
- HTML約定-LayUI
- 角色管理 role
- 數據表
- 列表
- 控制器
- 視圖
- 視圖-layui
- 角色添加
- 控制器
- 視圖
- 角色添加提交
- 控制器
- 驗證
- 角色修改
- 控制器
- 視圖
- 角色修改提交
- 控制器
- 角色刪除
- 控制器
- 權限設置
- 控制器
- 視圖
- 模型
- 權限設置提交
- 用戶 user
- 數據表
- 列表
- 控制器
- 視圖
- 模型
- 添加
- 控制器
- 視圖
- 添加提交
- 控制器
- 驗證器
- 編輯
- 控制器
- 視圖
- 編輯提交
- 控制器
- 驗證器
- 刪除
- 停用啟用
- 角色用戶中間表role_user
- 菜單管理
- 數據表
- 表格折疊列表
- 控制器
- 視圖
- 全部列表
- 控制器
- 視圖
- 填加
- 控制器
- 視圖
- 填加提交
- 控制器
- 驗證器
- 編輯
- 控制器
- 視圖
- 編輯提交
- 控制器
- 驗證器
- 刪除
- 控制器
- 視圖
- 導入菜單
- 視圖
- 控制器
- 特別注意
- annotation
- 導出菜單
- 視圖
- 控制器
- 排序
- 控制器
- 視圖
- 模型