同步操作将从 hypercmf/hypercmf1.0 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Hypercmf 是基于Hyperf + layui 的内容、权限管理框架,使用前请先学习了解Hyperf。感谢Hyperf团队给phper提供了一个优雅与高性能共存的完美框架,让phper能够走上微服务的开发之路。
本内容框架主要目的是让已经使用Hyperf的phper能够像以前使用其他php框架一样,方便开发后端页面和功能。之所以选择经典UI框架Layui,是因为Layui是大多数后端开发人员都熟知的UI框架,不管是前后端分离还是直接通过php渲染,Layui都是不错的选择;同时也降低了很多还没上手vue的phper的使用门槛。
如果您享受 Hypercmf 带来的高开发效率或者学习参考价值,可以赞助一下来表示您对Hypercmf的认可。
使用该内容框架时,可以参考Hyperf官方文档,本框架该版本请使用Hyperf2.2版本的文档。 链接
Layui文档 链接
版本 | 发布时间 | Hyperf版本 |
---|---|---|
1.0.0 | 2023年4月 | v2.2 |
账号:test
密码:test
微信:forpastime
主要使用git
版本库安装和更新。
git clone https://gitee.com/hypercmf/hypercmf1.0.git
PHP >=7.4 and <= 8.0
Redis 必须
Linux环境
Linux下需要安装PHP的swoole4.x 扩展并关闭了Short Name
另外,按照Hyperf官方文档还需要安装以下扩展
Docker环境 如果你是在windows下开发,使用docker请参考下面启动容器代码,“ E:\projects\hypercmf”即从git仓库克隆下来存放到你电脑的项目的路径,“/data/hypercmf”为容器内项目存放路径,其中9512是注册到Nacos服务中心的端口号。
docker run -it --name hypercmf \
-v E:\projects\hypercmf:/data/hypercmf \
-p 9501:9501 \
-p 9502:9502 \
-p 9512:9512 \
--privileged -u root \
--entrypoint /bin/sh \
hyperf/hyperf:7.4-alpine-v3.11-swoole
如果是在Linux环境下使用Docker,则参考下面启动容器代码
docker run -it --name hypercmf \
-v /www/hypercmf:/data/hypercmf \
-p 9501:9501 \
-p 9502:9502 \
-p 9512:9512 \
--privileged -u root \
--entrypoint /bin/sh \
hyperf/hyperf:7.4-alpine-v3.11-swoole
目录结构基本上是Hyperf生成的目录结构。Restful接口统一有Controller注解生成,Controller内通过各业务Service调用Model层实现数据库查询。
├── app
│ ├── Aspect //切面
│ ├── Common
│ │ └── Common.php // 常量函数库
│ ├── Constants
│ │ └── StatusCode.php // 常量状态码,枚举类
│ ├── Controller // 通过目录划分应用
│ │ ├── Admin // 后台应用
│ │ │ ├── ArticleController.php // 文章控制器
│ │ │ ├── DataController.php // 数据备份管理控制器
│ │ │ ├── FileController.php // 附件控制器
│ │ │ ├── IndexController.php // 后台首页控制器
│ │ │ ├── LoginController.php // 后台登录控制器
│ │ │ ├── NodeController.php // 后台节点控制器
│ │ │ ├── SystemController.php // 系统配置控制器
│ │ │ ├── UserController.php // 管理员及用户控制器
│ │ ├── Api // 接口应用
│ │ │ ├── FilController.php // 文件管理控制器
│ │ │ ├── PayNotifyController.php // 支付回调通知
│ │ │ ├── UserController.php // 用户接口
│ │ │ ├── WxController.php // 微信应用接口
│ │ ├── Home // 前台应用,控制器目录
│ │ │ └── NotifyController.php // 接收通知控制器
│ │ ├── AdminBaseController.php // 后台使用模板引擎可以继承该类,封装了 返回方法和渲染模板方法
│ │ └── AbstractController.php //根据官方文档,不建议继承该类,建议使用Hypercmf封装的Result工具类
│ ├──
│ ├── Exception // 异常
│ ├──
│ ├── Listener // 监听
│ ├── Middleware // 中间件
│ ├── Models // 数据库模型
│ ├── Service //服务类
│ │ ├── AdminService.php //管理员业务服务层
│ │ ├── AdminServiceInterface.php // 管理员业务服接口
│ │ ├── FileService.php // 文件业务服务层
│ │ ├── SmsService.php // 短信业务服务层
│ │ ├── UserService.php // 客户端用户业务服务层
│ │ ├── UserServiceInterface.php // 客户端用户业务服务层接口
│ │ ├── WechatService.php // 微信应用业务服务层
│ ├── Utils //工具类库
│ │ └── Result.php // 统一返回方法封装,该类接管了Response上下文,不影响中间件使用
│ ├── View //视图模板
│ │ ├── admin //后台渲染模板
│ │ └── home //前端渲染模板
├── bin
│ └── hyperf.php // Hyperf启动文件
├── config // 配置文件目录
│ ├── autoload // Hyperf各功能配置文件(主要的)
│ │ ├── amqp.php
│ │ ├── aspect.php
│ │ ├── databases.php
│ │ ├── file.php
│ │ ├── logger.php
│ │ ├── middlewares.php
│ │ ├── redis.php
│ │ ├── server.php
│ │ ├── services.php
│ │ ├── view.php
│ │ ├── watcher.php
│ ├── config.php // 主配置文件
│ ├── container.php // 容器入口文件
│ └── routes.php // 路由配置文件
├── data //sql文件及备份文件
├── public // 静态目录
│ │ ├── admin //后台管理系统页面
│ │ ├── uploads //上传到本地文件存储目录
│ │ └── static// 静态资源
├── routes
│ └── user.php // 分模块配置路由文件(示例)
├── runtime //缓存目录
├── test // 单元测试
├── vendor// 监听启动脚本文件
└── .env.example // 环境变量配置文件,在项目根目录创建“.env”后将该文件内容复制进去修改为自己的配置项
.php
为后缀。可以使用 hyperf命令生成部分,比如常见的Controller、Model、Middleware、Listener等。自动生成的文件无论是类名、方法名都是规范的驼峰法。 gen:amqp-consumer
gen:amqp-producer
gen:aspect
gen:command
gen:constant
gen:controller
gen:job
gen:kafka-consumer
gen:listener
gen:middleware
gen:migration
gen:model
gen:nats-consumer
gen:nsq-consumer
gen:process
gen:request
gen:resource
gen:seeder
Hypercmf也将常用的一些函数进行了封装,存放在/app/Common/common.php内。建议创建新方法时,使用统一的for_
前缀,有助于想使用方法是通过for_
前缀可以快速根据提示选择方法。
数据表和字段采用小写加下划线方式命名,默认表前缀为for_
。并注意字段名不要以下划线开头,例如for_user
表和user_name
字段,不建议使用驼峰和中文作为数据表及字段命名。如果表中有创建时间和更新时间,建议使用created_at
和updated_at
。然后通过使用 gen:model + 表名(如:php bin/hyperf gen:model user),生成后代码执行新增数据和更新数据时不传入created_at和updated_at的值也会默认匹配created_at和updated_at字段。
Hyperf查询时select()中传入的值是数组,但是从编码角度['id','name']这样的写法可能很多会Thinkphp的phper觉得比较麻烦,所以我们封装了转换方法,传入的字段写法:'id,name',调用方法直接转换成数组再传进去
for_field_str_to_array($field)
//伪代码
class UserService
{
public function getVodOne($where=[],$field='id,name,age')
{
$field = for_field_str_to_array($field);
return $this->userModel->getOne($where,$field);
}
}
我们把 Module/Controller/action称之为一个“节点”,比如admin/UserController/login表示后台用户登录节点,这个节点是可以被后台管理分配给管理员权限的。当然“节点”是可以存着于任何模块,比如有一个Blog/FansController/ban(博客粉丝禁言)节点,我们完全可以给不同角色的博主通过节点权限控制是否能够禁言粉丝。
HyperCMF封装了自定义的AdminNode注解功能,只需要在每个控制器方法上添加该注解,再通过命令或后台管理更新注解菜单,即可将新增代码的注解节点添加到node数据表中去。
方法一:命令
php bin/hyperf.php for:annotation-menu-into-node
方法二:后台更新
系统管理->操作权限管理->更新注解菜单
文件位置:/app/Annotation/AdminNode.php 就像注入Controller和GetMapping类似,类级的注解为顶级节点,方法级的注解为顶级节点的子节点。
类级节点注解:
/**
* @AdminNode(name="节点管理",isMenu=1,sort=20,style="layui-icon-radio")
*
* @Middlewares({
* @Middleware(AdminTokenMiddleware::class),
* @Middleware(AdminPowerMiddleware::class)
* })
* @Controller(prefix="admin/node")
*/
class NodeController{}
方法级注解:
/**
* @AdminNode(name="节点更新",isMenu=1,sort=30)
* @GetMapping(path="update")
* @return mixed
*/
注解的属性有:name节点名称、isMenu是否显示为后台菜单、sort节点排序值、style icon样式(顶级节点有效)
菜单管理功能对应的有admin、role、node三张表,其中管理员和角色对应的权限均在node表中。 node表数据组成是:后台手动添加菜单 + 代码注解菜单
HyperCMF已将文件管理完成。支持本地、阿里云OSS、七牛云Kodo。 在需要引用上传文件的地方弹出文件列表,双击可以选择传值到父页面。
我们写了一个图片选择器,只需要通过layer.open打开 admin/public/image_list.html即可,在父页面监听该页面回传的值,在该页面下“使用选中图片”即可回传给父页面。
富文本编辑器使用的是Ueditor,编辑器的文件上传也会将记录存储到文件管理,支持单图、多图、视频上传。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。