## 代码
```
<?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
- 导出菜单
- 视图
- 控制器
- 排序
- 控制器
- 视图
- 模型