独立开发者系列(31)——fastadmin项目的二次开发

在前面构建项目的fastadmin入门 里面,我们已经能快速搭建该体系和根据数据表建立最简单的CURD项目。类似练手的图书管理系统,内部项目修改管理,也对系统进行了简单的部署。这梳理拿到真正项目的开发流程。

     默认的开发目录和代码程序运行的是public,如果权限全部打开,并且不限制跨站的限制,可以直接yuming/public/的方式运行程序
  伪静态代码路由的相关配置: 也就是省略掉index.php?s=会自动将后缀拼接到s后面去。

location ~* (runtime|application)/{

       return 403;

}

location / {

       if (!-e $request_filename){

              rewrite  ^(.*)$  /index.php?s=$1  last;   break;

       }

}
  所以API端的默认路由是 我们新建个api路由 api/controller/action 可以直接访问到路由。这种路由结构非常的方便,如果不考虑安全性能,非常实用。

对外输出的用户数据表是user表,user表自带了权限认证登录基础功能。默认的userAPI功能 api/user/login .其中基础功能里面主要集成了:

用户登录|退出|注册|验证码登录|修改手机号|修改邮箱|会员中心初始化|会员信息修改|第三方登录|重置密码   常用的10个基础API接口

登录验证规则:邮箱验证|手机验验证|用户名验证,如果有额外的信息,全部使用extend数组传入,自动写入到user数据表。这样保证了数组传入数据的灵活性,又减去了大量重复造轮子的烦恼。

报错的相关提示,内置了多语言的报错,但是实际开发里面,fastadmin大部分面对的还是国内的用户,多语言报错相对比较鸡肋,直接在$this->setError设置进去,取报错的时候,通过 $this->getError,常见的不规范写法,是自己定义一个外部报错,直接在controller里面。

Fastadmin的API标准流程写法(通用的API标准写法):
读取前端参数 默认是post获取参数,非必填参数可写默认值
验证参数的非空和正则判断(邮箱和手机号的合法性检测)
将参数传入核心方法 执行逻辑

将报错封装在请求的方法里面

库方法的封装与使用 :

在框架里面,有通用库的概念app\common\library\文件里面,主要有auth 权限认证库,email 邮件库(包括发送邮件和判断)Ems(短信库,)log (日志库)

Menu 菜单库 security 安全过滤库

use app\common\library\Auth; 将复杂的功能封装到library 提供给全局使用,而不是单独的logic 一般限定在局部。

所以系统的开发结构是  controller 处理数据过滤和输出   library 处理逻辑
model处理数据库交互层 将之前的MLC结构做了个微调。
相关常用方法:

获取登录用户的信息 $this->auth->getUserInfo() 提取的是我们限制在auth里面的字段 如果是要获取user全部的表  直接$this->auth->getUser() 前者方法过滤掉了不该出现的字段。
可以看到 框架前端使用 Auth::XXX 这种静态写法居多,这是框架前端推崇的一种写法,直接通过引入文件,然后暴露静态访问的方法。如果没有static 方法,需要先使用new 一个对象的使用,这里解释下 静态方法 static 的优势,由于不与特定的对象绑定,直接初始化的时候加载到内存里面,访问更快,效率更高,频繁调用的时候,优势比较大,有个劣势就是 如果全部使用静态方法,会导致程序不方便调试。当系统逻辑比较简单时候,请求又比较多,静态方法优势比较明显。

后台如果要更改CURD方法,需要将对应的操作从需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改。默认的。

Tp5框架执行一个类前,会检测_initialize方法的存在,并先于其他方法的执行,后台的控制器模型会优先执行backend.php的_initialize方法,主要处理系统配置 语言后台加载,访问权限控制


默认的框架方法:   对接的相关接口 index 后台列表的核心方法
add 新增  edit 编辑 del 删除  import 导出一般我们二次开发会改动这几个方法。Add/edit 一般是后台变动某个字段 需要进行额外逻辑关联判断,会触发其他逻辑,需要我们进行重写开发。

  后台页面的改动和路径:
后台生成的模板,如果我们要自己开发新的自动化生成模板,或者我们要新增生成新的页面标志或者自动逻辑的生成,或者更改系统的时间生成格式,或者其他标记,更改生成的模板路径: application/admin/command/Crud/stubs

  如果要自定义一键生成的规则 application/admin/command/Crud.php 修改这个文件即可 ,命令行的生成是可以修改的。

  生成的html和JS相关修改,首页列表的修改 public/assets,列表图片的显示样式修改,而编辑和添加在默认的admin后台目录可以直接进行编辑。

另外如果后端要获取admin_id 相关信息,也就是当前登录的用户数据 $this->auth->getUserInfo()  就可以直接获取到,可以额外新增一个管理员逻辑,比如二级管理员不能超过三个三级管理员,或者后台登陆者在登录的时候,自动填充当前的uid到服务器里面。

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

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

相关文章

【Linux系统化学习】数据链路层

目录 数据链路层解决的问题 以太网 认识局域网 以太网帧格式 两个问题 认识MAC地址 认识MTU ARP协议 ARP协议的作用 ARP数据报格式 ARP协议的工作流程 数据链路层解决的问题 对于TCP/IP四层协议来说,数据链路层才是真正从传送数据进行跑腿办事情的&…

excel批量新建多个同类型的表格

背景引入 比如,一个企业有多个部门,现在需要按照某一个excel表模板收集各个部门的信息,需要创建数十个同类型表格,且标题要包含部门名称。 1.修改模板表格标题 在一个文件夹下面放入需要发放给各个部门的表格,将标题…

微软蓝屏事件暴露的网络安全问题

目录 1.概述 2.软件更新流程中的风险管理和质量控制机制 2.1.测试流程 2.2.风险管理策略 2.3.质量控制措施 2.4.小结 3.预防类似大规模故障的最佳方案或应急响应对策 3.1. 设计冗余系统 3.2. 实施灾难恢复计划 3.3. 建立高可用架构 3.4. 类似规模的紧急故障下的响应…

Kotlin泛型实化

内联函数 reified实现 1. 内联函数 内联函数中的代码会在编译的时候自动被替换到调用它的地方,这样的话也就不存在什么泛型擦除的问题了,因为代码在编译之后会直接使用实际的类型来替代内联函数中的泛型声明。 2. reified关键字 在Kotlin中&#xff0…

秒杀优化: 记录一次bug排查

现象 做一人一单的时候,为了提升性能,需要将原来的业务改造成Lua脚本加Stream流的方式实现异步秒杀。 代码改造完成,使用Jmeter进行并发测试,发现redis中的数据和预期相同,库存减1,该用户也成功添加了进去…

【Node】npm i --legacy-peer-deps,解决依赖冲突问题

文章目录 🍖 前言🎶 一、问题描述✨二、代码展示🏀三、运行结果🏆四、知识点提示 🍖 前言 npm i --legacy-peer-deps,解决依赖冲突问题 🎶 一、问题描述 node执行安装指令时出现报错&#xff…

ES中的数据类型学习之ALIAS

Alias field type | Elasticsearch Guide [7.17] | Elastic 这里只针对data type的alias,暂时不说 index的alias。直接实战开始 PUT trips { "mappings": { "properties": { "distance": { "type": &…

Linux、Windows和macOS上使用Telnet

文章目录 LinuxWindowsmacOS 在Linux、Windows和macOS上使用Telnet时,不同的系统有不同的工具和设置方法。以下是在这些系统上使用Telnet的简要说明: Linux 在Linux上,Telnet通常是通过telnet命令来使用的。首先,你需要确保你的系…

前端:Vue学习-3

前端:Vue学习-3 1. 自定义指令2. 插槽2.1 插槽 - 后备内容(默认值)2.2 插槽 - 具名插槽2.3 插槽 - 作用域插槽 3. Vue - 路由3.1 路由模块封装3.2 声明式导航 router-link 高亮3.3 自定义匹配的类名3.4 声明式导肮 - 跳转传参3.5 Vue路由 - 重…

[题解]CF1401E.Divide Square(codeforces 05)

题目描述 There is a square of size 106106106106 on the coordinate plane with four points (0,0)(0,0) , (0,106)(0,106) , (106,0)(106,0) , and (106,106)(106,106) as its vertices. You are going to draw segments on the plane. All segments are either horizonta…

【数据结构】顺序表(ArrayList的具体使用)

🎇🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔 💪💪💪 谢谢你这么帅…

VSCode STM32嵌入式开发插件记录

要卸载之前搭建的VSCode嵌入式开发环境了,记录一下用的插件。 1.Cortex-Debug https://github.com/Marus/cortex-debug 2.Embedded IDE https://github.com/github0null/eide 3.Keil uVision Assistant https://github.com/jacksonjim/keil-assistant/ 4.RTO…

政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署MimicMotion :利用可信度感知姿势指导生成高质量人体运动视频

目录 项目介绍 项目相关工作 图像/视频生成的扩散模型 姿势引导的人体动作转移 生成长视频 方法实践 与最先进方法的比较 消融研究 部署验证 1. 下载项目: 2. 建立环境 3. 下载参数模型 A. 下载 DWPose 预训练模型:dwpose B. 从 Huggingfa…

DDD(3)-领域驱动设计之如何建模

前言 上一篇:从领域驱动到模型驱动中我们讨论到,领域驱动设计的核心思想是保持业务-模型-代码的一致性,模型作为沟通业务和代码的工具,至关重要,今天这篇文章就来讨论DDD中建模的一些思考和方法。 什么是建模 虽然看…

基于SSM的高考志愿选择辅助系统

基于SSM的高考志愿选择辅助系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 前台 前台首页 院校展示 后台 后台首页 学校管理 摘要 随着高考制度的不断完…

【Drone】drone编译web端 防墙策略 | 如何在被墙的状态drone顺利编译npm

一、drone编译防墙版本 1、web端drone kind: pipeline type: docker name: ui steps:- name: build_projectimage: node:20-slim depends_on: [clone]volumes:- name: node_modulespath: /drone/src/node_modulescommands:- pwd- du -sh *- npm config set registry https://…

测试——Selenium

内容大纲: 什么是自动化测试 什么是Selenium Selenium工作原理 Selenium环境搭建 Selenium API 目录 1. 什么是自动化测试 2. 什么是Selenium 3. Selenium工作原理 4. Selenium环境搭建(java) 5. Selenium API 5.1 定位元素 5.1.1 CSS选择器定位元素 5.1.2 XPath定位元…

k8s中部署nacos

1 部署nfs # 在k8s的主节点上执行 mkdir -p /appdata/download cd /appdata/download git clone https://github.com/nacos-group/nacos-k8s.git 将nacos部署到middleware的命名空间中 kubectl create namespace middleware cd /appdata/download/nacos-k8s # 创建角色 kub…

VScode连接虚拟机运行Python文件的方法

声明:本文使用Linux发行版本为rocky_9.4 目录 1. 在rocky_9.4最小安装的系统中,默认是没有tar工具的,因此,要先下载tar工具 2. 在安装好的vscode中下载ssh远程插件工具 3. 然后连接虚拟机 4. 查看python是否已经安装 5. 下载…

【状态估计】偏差,匹配和外点

我们都知道:对于状态的估计可能是有偏差的,特别是在运动模型或观测模型是非线性的情况下。在简单的立体相机的例子中,我们看到MAP方法相比于全贝叶斯方法来说是有偏差的。同时,我们也看到批量ML方法对于真实值来说也是有偏差的&am…