群控系统服务端开发模式-应用开发-菜单功能开发

        为什么优先开发菜单,而不是优先开发管理员?查看一下程序草图就明白,还有一个重点就是,管理员需要添加图片,而我还没有封装上传工具及上传目标。

一、添加路由

        在根目录下route文件夹下的app.php文件里面,添加如下代码

Route::post('menu/get_all','permission.Menu/getAll');// 获取所有菜单数据
Route::post('menu/get_info','permission.Menu/getInfo');// 获取单个菜单数据
Route::post('menu/save_info','permission.Menu/saveInfo');// 保存菜单数据
Route::post('menu/status_info','permission.Menu/statusInfo');// 启禁用菜单数据
Route::post('menu/delete_info','permission.Menu/deleteInfo');// 删除菜单数据

二、添加控制层管理

        在根目录下app文件夹下controller文件夹中创建文件夹并命名为permission,然后在permission文件夹中创建控制器并命名为Menu,然后让Menu继承Base总控制,最后优先开发菜单数据层管理,也就是本文中写到的《添加数据层管理》。代码如下:

<?php
/*** 菜单控制管理* User: 龙哥·三年风水* Date: 2024/10/31* Time: 9:36*/
namespace app\controller\permission;
use app\controller\Base;
use app\model\permission\Menu as MenuModel;
class Menu extends Base
{}

        1、获取所有数据方法

public function getAll(){$list = MenuModel::getAll([],'id,menuname,pid,title,path,component,icon,redirect,always_show,is_hidden,is_cache,is_icon,is_menu,button_type,status','sort DESC,id DESC');return succ(Tree::list_to_tree($list, 0, 'id', 'pid', 'children'));
}

        2、单个菜单数据方法

public function getInfo(){$id = $this->request->param('id', 0);if(empty($id))return err('主键参数必须上传');$data = MenuModel::dataFind(['id' => $id], 'id,menuname,pid,title,path,component,icon,redirect,always_show,is_hidden,is_cache,is_icon,is_menu,button_type,sort,status', true);return succ($data);
}

        3、保存菜单数据方法

                优先开发验证层管理,也就是本文中第四节所说的《添加验证层管理》。

    //保存菜单数据public function saveInfo(){$param = $this->request->param();$validate = new \app\validate\permission\Menu;if (!$validate->check($param)) return err($validate->getError());$data['menuname'] = $param['menuname'];$data['title'] = $param['title'];$data['path'] = $param['path'];$data['component'] = $param['component'];$data['icon'] = $param['icon'];$data['redirect'] = $param['redirect'];$data['always_show'] = (int)$param['always_show'];$data['is_hidden'] = (int)$param['is_hidden'];$data['is_cache'] = (int)$param['is_menu'] === 1 ? (int)$param['is_cache'] : 0;$data['is_icon'] = (int)$param['is_menu'] === 1 ? (int)$param['is_icon'] : 0;$data['is_menu'] = (int)$param['is_menu'];$data['button_type'] = (int)$param['button_type'];$data['sort'] = (int)$param['sort'];$data['status'] = (int)$param['status'];$data['update_time'] = date('Y-m-d H:i:s', time());if (empty($param['id']))$data['create_time'] = date('Y-m-d H:i:s', time());if (is_array($param['pid'])) {$data['pid'] = $param['pid'][count($param['pid']) - 1];} else {$data['pid'] = $param['pid'];}MenuModel::dataSave($data, empty($param['id']) ? [] : ['id' => $param['id']]);return succ('操作成功');}

        4、启禁用数据方法

    public function statusInfo(){$param = $this->request->param();if (!is_array($param['id']) || count($param['id']) === 0) return err('唯一编号必须是数组且至少需要一个');if (!in_array($param['status'],[0,1])) return err('状态必须选择一种');MenuModel::toStatus($param['id'],$param['status']);return succ('操作成功');}

        5、删除数据方法

    public function deleteInfo(){$id = $this->request->param('id');if (!is_array($id) || count($id) === 0) return err('请上传参数');MenuModel::dataDetele($id);return succ('操作成功');}

三、添加数据层管理

        在根目录下app文件夹下的model文件夹中创建管理层文件夹并命名为permission,然后在permission文件夹下创建角色数据控制器并命名为Menu,然后继承Tools验证工具集。代码如下:

<?php
/*** 菜单数据管理* User: 龙哥·三年风水* Date: 2024/10/31* Time: 9:43*/
namespace app\model\permission;
use app\model\Tools;
class Menu extends Tools
{protected static $name = 'permission_menu';protected static $connection = 'mysql';protected $pk = 'id';//获取所有列表public static function getAll($where = [], $field = '*', $order = 'id DESC'){return self::dataAlls(self::$name, $where, $field, $order, [], self::$connection);}//获取单条数据public static function dataFind($where = [], $field, $findType = true){return self::dataFinds(self::$name, $where, $field, $findType, self::$connection);}//保存数据public static function dataSave($data, $where = []){return self::dataSaves(self::$name, $data, $where, self::$connection);}//启禁用数据public static function toStatus($ids,$status){foreach($ids as $k => $v){self::recursions(self::$name,['id' => $v],'pid', self::$connection,$ids);}return self::dataSaves(self::$name, ['status' => $status], [['id','in',$ids]], self::$connection);}//删除数据public static function dataDetele($where){return self::recursionDeteles(self::$name, $where, 'pid', self::$connection); // TODO: Change the autogenerated stub}
}

四、添加验证层管理

        在根目录下app文件夹下的validate文件夹中创建管理层文件夹并命名为permission,然后在permission文件夹下创建菜单验证控制器并命名为Menu,然后继承Tools验证工具集。代码如下:

<?php
/*** 菜单验证管理* User: 龙哥·三年风水* Date: 2024/10/31* Time: 10:16*/
namespace app\validate\permission;
use app\validate\Tools;
class Menu extends Tools
{protected $rule = ['id' => 'require|number','menuname' => 'requireIf:is_menu,1|length:1,40|alpha|unique:permission_menu','pid' => 'require','title' => 'require|length:1,30','path' => 'requireIf:is_menu,1|length:1,100','component' => 'requireIf:is_menu,1|length:1,100','icon' => 'requireIf:is_menu,1|length:1,100','redirect'  =>  'length:1,100','button_type' => 'require|checkButtonType'];protected $message = ['id.require' => '编号必须填写','id.number' => '编号必须是数字类型','menuname.requireIf' => '规则唯一标识必须填写','menuname.length' => '规则唯一标识必须是1到40位','menuname.alpha' => '规则唯一标识必须是纯字母','menuname.unique' => '路由名称必须唯一','pid.require' => '父类必须选择','title.require' => '路由名称必须填写','title.length' => '路由名称必须是1到30位','path.requireIf' => '路径必须填写','path.length' => '路径的长度必须是1到30位','component.requireIf' => '组件地址必须填写','component.length' => '组件地址必须是1到100位','icon.requireIf' => '图标必须填写','icon.length' => '图标必须是1到100位','redirect.length' => '重定向地址必须是1到100位','button_type.require' => '按钮类型必须选择',];/*** 按钮类型验证* @ param $value* @ param string $rule* @ param string $data* @ param string $field* @ return bool|string*/protected function checkButtonType($value, $rule = '', $data = '', $field = ''){if ($data['is_menu'] === 0) {if (in_array($value, [1, 2, 3, 4, 5, 6, 7, 8, 9])) {return true;} else {return '按钮类型必须是1到9之间';}} else {return true;}}
}

五、树形结构工具开发

        在根目录下extend文件夹下Other文件夹中创建树形结构工具并命名为Tree。代码如下:

<?php
/*** 树形结构工具* User: 龙哥·三年风水* Date: 2024/10/31* Time: 9:53*/
namespace Other;
class Tree
{/*** 格式化分类,生成多维数组的树* @ param $list 数组* @ param int $root 指定根节点* @ param string $pk 主键标识* @ param string $pid 父级标识* @ param string $child 子级标识* @ return array 返回整理后的树形结构数组*/public static function list_to_tree($list, $root = 0, $pk = 'id', $pid = 'parentId', $child = 'child'){// 创建Tree$tree = array();if (is_array($list)) {// 创建基于主键的数组引用$refer = array();foreach ($list as $key => $data) {$refer[$data[$pk]] =& $list[$key];}foreach ($list as $key => $data) {// 判断是否存在parent$parentId = $data[$pid];if ($root == $parentId) {$tree[] =& $list[$key];} else {if (isset($refer[$parentId])) {$parent =& $refer[$parentId];$parent[$child][] =& $list[$key];}}}}return $tree;}
}

六、提前说明 

        到处,整个菜单api控制已经开发完毕。下一步采用apipost测试及开发角色控制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463184.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

顶点动画-河流的效果

目标是让一个矩形网格面片&#xff0c;通过顶点动画&#xff0c;实现出河流的效果。&#xff08;如下图&#xff09;所谓的河流效果&#xff0c;就是呈现出波浪感&#xff0c;而想要呈现出波浪感&#xff0c;我们必须了解 波长、波动频率、波动幅度 这些关键因素 1、波浪感的关…

线程函数和线程启动的几种不同形式

线程函数和线程启动的几种不同形式 在C中&#xff0c;线程函数和线程启动可以通过多种形式实现。以下是几种常见的形式&#xff0c;并附有相应的示例代码。 1. 使用函数指针启动线程 最基本的方式是使用函数指针来启动线程。 示例代码&#xff1a; #include <iostream&g…

3.1 快速启动Flink集群

文章目录 1. 环境配置2. 本地启动3. 集群启动4. 向集群提交作业4.1 提交作业概述4.2 添加打包插件4.3 将项目打包4.4 在Web UI上提交作业4.5 命令行提交作业 在本实战中&#xff0c;我们将快速启动Apache Flink 1.13.0集群&#xff0c;并在Hadoop集群环境中提交作业。首先&…

讲讲RabbitMQ 性能优化

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ 性能优化&#xff1f;】面试题。希望对大家有帮助&#xff1b; 讲讲RabbitMQ 性能优化 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RabbitMQ 是一个强大的消息代理&#xff0c;广泛用于分布式系统中&#x…

redolog与binlog的写入机制

redo log 事务在执行的过程中&#xff0c;生成的redo log是要先写到redo log buffer中的。redo log buffer里面的内容不需要每次生成后都直接持久化到磁盘。 如果事务执行期间MySQL发生异常重启&#xff0c;那这部分日志就丢了&#xff0c;但是由于没有commit&#xff0c;所以…

推荐一款数学绘图工具:FX Draw Tools

FX Draw Tools是目前最新好用的一款数学绘图工具。该软件界面简洁&#xff0c;使用方便。该软件能够帮助用户快速制作数学图表&#xff0c;从而提高用户的工作效率&#xff0c;轻松完成制图工作&#xff0c;欢迎需要的用户前来下载使用。 功能特色 1. 180和360可以被添加到任何…

《云计算网络技术与应用》实训8-1:OpenvSwitch简单配置练习

1.按《云计算网络技术与应用》实训5-1进行环境配置&#xff0c;安装好OVS 2.开启OVS虚拟交换机 3.创建一个网桥br0 4.查看网桥列表 5.把ens34网卡连接到网桥br0上 6. 查看网桥br0所有端口 7.列出网卡ens34连接的所有网桥列表 8.查看OVS网络状态 9.将网桥br0上连接的网卡ens34删…

Netty 组件介绍 - pipeline

ChannelPipeline为ChannelHandler链提供了容器&#xff0c;并且定义了该链上的入站和出站事件。当initChannel()被调用时&#xff0c;ChannelInitializer将在ChannelPipeline中安装一组自定义的ChannelHandler。他们的执行顺序就是添加顺序。 Server public class Server {pr…

Leetcode 热题100 之 二叉树3

1.二叉树展开为链表 思路分析&#xff1a;迭代法。对于每个节点&#xff0c;我们将其左子树放到右子树的位置。将原来的右子树接到新的右子树&#xff08;也就是原来的左子树&#xff09;的末端。移动到右子节点&#xff0c;继续处理下一节点&#xff0c;直到所有节点都处理完。…

UE5.4 PCG Layered Biomes插件

B站学习链接 官方文档 一、PCGSpawn Preset&#xff1a;负责管理PCG要用到的植被资产有哪些 二、BiomesSettings&#xff1a;设置要使用的植被资产Layer、Spawn参数 1.高度Layer参数&#xff1a; 2.地形Layer&#xff1a;我这里用地形样条线绘制了一块地形Layer 绘制点和…

单个相机矫正畸变

1、通过标定助手获取到内参外参&#xff0c;外参在此无效&#xff0c;只用到了内参 2、然后通过halcon算子进行矫正 参考&#xff1a;超人视觉

Orleans8.2入门测试

微软官方文档&#xff1a;快速入门&#xff1a;使用 ASP.NET Core 生成第一个 Orleans 应用 - .NET | Microsoft Learn 项目及引入的nuget库&#xff1a; 1、接口项目&#xff1b;2、接口实现项目&#xff1b;3、silo项目&#xff1b;4、客户端项目 其中Microsoft.Orleans.St…

电赛入门之软件stm32keil+cubemx

hal库可以帮我们一键生成许多基本配置&#xff0c;就不需要自己写了&#xff0c;用多了hal库就会发现原来用基本库的时候都过的什么苦日子&#xff08;笑 下面我们以f103c8t6&#xff0c;也就是经典的最小核心板来演示 一、配置工程 首先来新建一个工程 这里我们配置rcc和sys&…

第三十章 章节练习商品列表组件封装

目录 一、需求说明 二、技术要点 三、完整代码 3.1. main.js 3.2. App.vue 3.3. MyTable.vue 3.4. MyTag.vue 一、需求说明 1. my-tag 标签组件封装 (1) 双击显示输入框&#xff0c;输入框获取焦点 (2) 失去焦点&#xff0c;隐藏输入框 (3) 回显标签信息 (4) 内…

vue 快速入门

文章目录 一、插值表达式 {{}}二、Vue 指令2.1 v-text 和 v-html&#xff1a;2.2 v-if 和 v-show&#xff1a;2.3 v-on&#xff1a;2.4 v-bind 和 v-model&#xff1a;2.5 v-for&#xff1a; 三、生命周期四、Vue 组件库 Element五、Vue 路由 本文章适用于后端人员&#xff0c;…

数据建模圣经|数据模型资源手册卷2,探索数据库逻辑模型设计

在企业信息系统体系结构中&#xff0c;数据处于核心地位。数据模型是信息系统开发和应用的基本指南&#xff0c;在逻辑模型层面为数据在数据库中的存储提供蓝图&#xff0c;以及对宏观世界的抽象设计。 简介 《The Data Model Resource Book, Revised Edition, Volume2》&#…

形态学操作篇 原理公式代码齐活

一、腐蚀 腐蚀操作的核心原理是利用一个结构元素在图像上进行扫描&#xff0c;判断结构元素所覆盖的区域与前景像素的关系。如果结构元素完全被包含在前景像素区域内&#xff0c;那么结构元素中心对应的像素位置在腐蚀后的图像中被标记为前景像素&#xff1b;如果结构元素不完…

Unity引擎材质球残留贴图引用的处理

大家好&#xff0c;我是阿赵。   这次来分享一下Unity引擎材质球残留贴图引用的处理 一、 问题 在使用Unity调整美术效果的时候&#xff0c;我们很经常会有这样的操作&#xff0c;比如&#xff1a; 1、 同一个材质球切换不同的Shader、 比如我现在有2个Shader&#xff0c;…

Flarum:简洁而强大的开源论坛软件

Flarum简介 Flarum是一款开源论坛软件&#xff0c;以其简洁、快速和易用性而闻名。它继承了esoTalk和FluxBB的优良传统&#xff0c;旨在提供一个不复杂、不臃肿的论坛体验。Flarum的核心优势在于&#xff1a; 快速、简单&#xff1a; Flarum使用PHP构建&#xff0c;易于部署&…

数据结构-图

1. 感性的认识图 图是是数据结构中最复杂的一种。图的概念特别特别的多&#xff0c;相关的算法问题也很多。如果我们一开始就讲复杂的概念&#xff0c;可能很多同学都学不下去&#xff0c;太深奥&#xff0c;太枯燥。我们不妨先感性的认识图。 图看起来就像下图这样&#xff1…