- 新增角色菜单关联模型、控制器、请求验证和业务逻辑 - 新增用户角色关联模型、控制器、请求验证和业务逻辑 - 更新系统角色模型,增加与用户和菜单的关联 - 更新用户模型,增加与角色的关联和相关方法 - 在路由文件中添加新功能的路由定义
175 lines
5.6 KiB
PHP
175 lines
5.6 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Requests\Admin\System;
|
||
|
||
use App\Http\Requests\BaseRequest;
|
||
|
||
/**
|
||
* 系统菜单请求验证
|
||
*/
|
||
class SystemMenuRequest extends BaseRequest
|
||
{
|
||
/**
|
||
* 获取特定验证规则
|
||
*/
|
||
protected function getSpecificRules(): array
|
||
{
|
||
$action = $this->route()->getActionMethod();
|
||
|
||
return match($action) {
|
||
'list' => $this->listRules(),
|
||
'detail' => $this->detailRules(),
|
||
'create' => $this->createRules(),
|
||
'update' => $this->updateRules(),
|
||
'delete' => $this->deleteRules(),
|
||
'batchDelete' => $this->batchDeleteRules(),
|
||
'simpleList', 'tree', 'parentMenus' => [],
|
||
default => []
|
||
};
|
||
}
|
||
|
||
/**
|
||
* 获取分页验证规则
|
||
*/
|
||
private function getPaginationRules(): array
|
||
{
|
||
return [
|
||
'page' => ['sometimes', 'integer', 'min:1'],
|
||
'page_size' => ['sometimes', 'integer', 'min:1', 'max:100'],
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 列表查询验证规则
|
||
*/
|
||
private function listRules(): array
|
||
{
|
||
return array_merge($this->getPaginationRules(), [
|
||
'keyword' => ['sometimes', 'string', 'max:50'],
|
||
'status' => ['sometimes', 'integer', 'in:0,1'],
|
||
'type' => ['sometimes', 'integer', 'in:1,2,3'],
|
||
'parent_id' => ['sometimes', 'integer', 'min:0'],
|
||
'visible' => ['sometimes', 'integer', 'in:0,1'],
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 详情查询验证规则
|
||
*/
|
||
private function detailRules(): array
|
||
{
|
||
return [
|
||
'id' => ['required', 'integer', 'exists:system_menu,id'],
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 创建验证规则
|
||
*/
|
||
private function createRules(): array
|
||
{
|
||
return [
|
||
'name' => ['required', 'string', 'max:50'],
|
||
'parent_id' => ['sometimes', 'integer', 'min:0'],
|
||
'type' => ['required', 'integer', 'in:1,2,3'],
|
||
'path' => ['sometimes', 'string', 'max:200'],
|
||
'icon' => ['sometimes', 'string', 'max:100'],
|
||
'component' => ['sometimes', 'string', 'max:200'],
|
||
'component_name' => ['sometimes', 'string', 'max:50'],
|
||
'status' => ['sometimes', 'integer', 'in:0,1'],
|
||
'visible' => ['sometimes', 'integer', 'in:0,1'],
|
||
'keep_alive' => ['sometimes', 'integer', 'in:0,1'],
|
||
'always_show' => ['sometimes', 'integer', 'in:0,1'],
|
||
'sort' => ['sometimes', 'integer', 'min:0'],
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 更新验证规则
|
||
*/
|
||
private function updateRules(): array
|
||
{
|
||
return [
|
||
'id' => ['required', 'integer', 'exists:system_menu,id'],
|
||
'name' => ['required', 'string', 'max:50'],
|
||
'parent_id' => ['sometimes', 'integer', 'min:0'],
|
||
'type' => ['required', 'integer', 'in:1,2,3'],
|
||
'path' => ['sometimes', 'string', 'max:200'],
|
||
'icon' => ['sometimes', 'string', 'max:100'],
|
||
'component' => ['sometimes', 'string', 'max:200'],
|
||
'component_name' => ['sometimes', 'string', 'max:50'],
|
||
'status' => ['sometimes', 'integer', 'in:0,1'],
|
||
'visible' => ['sometimes', 'integer', 'in:0,1'],
|
||
'keep_alive' => ['sometimes', 'integer', 'in:0,1'],
|
||
'always_show' => ['sometimes', 'integer', 'in:0,1'],
|
||
'sort' => ['sometimes', 'integer', 'min:0'],
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 删除验证规则
|
||
*/
|
||
private function deleteRules(): array
|
||
{
|
||
return [
|
||
'id' => ['required', 'integer', 'exists:system_menu,id'],
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 批量删除验证规则
|
||
*/
|
||
private function batchDeleteRules(): array
|
||
{
|
||
return [
|
||
'ids' => ['required', 'array', 'min:1'],
|
||
'ids.*' => ['integer', 'exists:system_menu,id'],
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 获取验证错误消息
|
||
*/
|
||
protected function getSpecificMessages(): array
|
||
{
|
||
return [
|
||
'name.required' => '菜单名称不能为空',
|
||
'name.max' => '菜单名称不能超过50个字符',
|
||
'type.required' => '菜单类型不能为空',
|
||
'type.in' => '菜单类型值无效(1目录 2菜单 3按钮)',
|
||
'parent_id.min' => '父级菜单ID不能小于0',
|
||
'path.max' => '路由地址不能超过200个字符',
|
||
'icon.max' => '菜单图标不能超过100个字符',
|
||
'component.max' => '组件路径不能超过200个字符',
|
||
'component_name.max' => '组件名不能超过50个字符',
|
||
'status.in' => '菜单状态值无效(0正常 1停用)',
|
||
'visible.in' => '显示状态值无效(0显示 1隐藏)',
|
||
'keep_alive.in' => '缓存状态值无效(0缓存 1不缓存)',
|
||
'always_show.in' => '总是显示状态值无效',
|
||
'sort.min' => '排序值不能小于0',
|
||
'ids.required' => '请选择要删除的菜单',
|
||
'ids.min' => '至少选择一条记录进行删除',
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 字段别名
|
||
*/
|
||
public function attributes(): array
|
||
{
|
||
return [
|
||
'name' => '菜单名称',
|
||
'parent_id' => '父级菜单',
|
||
'type' => '菜单类型',
|
||
'path' => '路由地址',
|
||
'icon' => '菜单图标',
|
||
'component' => '组件路径',
|
||
'component_name' => '组件名称',
|
||
'status' => '菜单状态',
|
||
'visible' => '显示状态',
|
||
'keep_alive' => '缓存状态',
|
||
'always_show' => '总是显示',
|
||
'sort' => '排序',
|
||
];
|
||
}
|
||
}
|