study-api-v2/app/Http/Requests/Admin/System/SystemMenuRequest.php
hx a621de91ff feat(system): 添加系统菜单、角色菜单关联和用户角色关联功能- 新增系统菜单模型、控制器、请求验证和业务逻辑
- 新增角色菜单关联模型、控制器、请求验证和业务逻辑
- 新增用户角色关联模型、控制器、请求验证和业务逻辑
- 更新系统角色模型,增加与用户和菜单的关联
- 更新用户模型,增加与角色的关联和相关方法
- 在路由文件中添加新功能的路由定义
2025-07-15 01:14:15 +08:00

175 lines
5.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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' => '排序',
];
}
}