## 代碼
```
<?php
namespace app\admin\validate;
use think\Validate;
use think\Db;
class AdminMenuValidate extends Validate
{
protected $rule = [
'name' => 'require',
'app' => 'require',
'controller' => 'require',
'parent_id' => 'checkParentId',
'action' => 'require|unique:AdminMenu,app^controller^action',
];
protected $message = [
'name.require' => '名稱不能為空',
'app.require' => '應用不能為空',
'parent_id' => '超過了4級',
'controller.require' => '名稱不能為空',
'action.require' => '名稱不能為空',
'action.unique' => '同樣的記錄已經存在!',
];
protected $scene = [
'add' => ['name', 'app', 'controller', 'action', 'parent_id'],
'edit' => ['name', 'app', 'controller', 'action', 'id', 'parent_id'],
];
// 自定義驗證規則:菜單只能三級
protected function checkParentId($value)
{
$find = Db::name('AdminMenu')->where(["id" => $value])->value('parent_id');
if ($find) {
$find2 = Db::name('AdminMenu')->where(["id" => $find])->value('parent_id');
if ($find2) {
$find3 = Db::name('AdminMenu')->where(["id" => $find2])->value('parent_id');
if ($find3) {
return false;
}
}
}
return true;
}
}
```
- 附錄
- 邏輯與數據模型
- HTML約定-bootstrap
- HTML約定-LayUI
- 角色管理 role
- 數據表
- 列表
- 控制器
- 視圖
- 視圖-layui
- 角色添加
- 控制器
- 視圖
- 角色添加提交
- 控制器
- 驗證
- 角色修改
- 控制器
- 視圖
- 角色修改提交
- 控制器
- 角色刪除
- 控制器
- 權限設置
- 控制器
- 視圖
- 模型
- 權限設置提交
- 用戶 user
- 數據表
- 列表
- 控制器
- 視圖
- 模型
- 添加
- 控制器
- 視圖
- 添加提交
- 控制器
- 驗證器
- 編輯
- 控制器
- 視圖
- 編輯提交
- 控制器
- 驗證器
- 刪除
- 停用啟用
- 角色用戶中間表role_user
- 菜單管理
- 數據表
- 表格折疊列表
- 控制器
- 視圖
- 全部列表
- 控制器
- 視圖
- 填加
- 控制器
- 視圖
- 填加提交
- 控制器
- 驗證器
- 編輯
- 控制器
- 視圖
- 編輯提交
- 控制器
- 驗證器
- 刪除
- 控制器
- 視圖
- 導入菜單
- 視圖
- 控制器
- 特別注意
- annotation
- 導出菜單
- 視圖
- 控制器
- 排序
- 控制器
- 視圖
- 模型