[开源分享]纯手撸webman + LAYUI的极速后台开发框架

xianrenqh

基于webman+mysql 开发的php后台权限管理系统

huicmf_webman

项目地址:

【gitee】

https://gitee.com/xianrenqh/huicmf_webman


后台演示

http://webman.xiaohuihui.net/admin

账号:admin

密码:admin888

运行环境~~!:

php: 7.3+ ,推荐7.4

mysql: 5.5+

Redis

备注:

支持php8+。

后台登录做了登录错误安全限制:

  1. 5分钟内连续错误超过5次,限制此ip再次访问。(需要在后台设置里(或者数据库中)解除ip)
  2. N分钟内连续N次输入密码错误,此账号将禁止登录。(过去N分钟之后才能再次登录)
  3. 2中的N可以在环境变量.env中设置(默认均为10)

安装:

1.首先clone代码到项目目录:

https://gitee.com/xianrenqh/huicmf_webman.git

2.在项目根目录执行:

composer update

3.导入并配置数据库:

导入数据并配置数据库文件方式有2种。任意一种即可。

1.命令行导入

在命令输入以下命令并执行:

# 简洁命令
php webman config:mysql --u root --p 123456 --d databasename
#完整命令
php webman config:mysql --h 127.0.0.1 --port 3306 --u root --p 123456 --d databasename --in 0

命令行中参数意义:

参数 是否必填 默认值 描述
--h 127.0.0.1 host地址
--port 3306 端口号
--u 数据库用户名
--p 数据库密码
--d 数据库名
--in 0 是否强制安装数据库:是=1

注意:

  1. 如果数据库已存在,同时想要强制(覆盖)安装,请携带参数 "--in 1" 。否则请更换数据库名
  2. 如果地址和端口一致,可以不写其参数
  3. 如果携带参数,那么参数后面的值必须存在。
  4. 如果数据库的密码为空,此方法无法安装,原因同3。

2.原始sql导入

1.根目录找到 install.sql 并导入数据库

2.设置 config/thinkorm.php 文件中的数据库配置

3.如果使用.env文件,请把根目录下.example.env重命名为:.env并设置.env中的数据库配置

4.【注:】 如果使用.env配置数据库,则 config/thinkorm.php 文件的数据库配置项不生效。

4.服务器放行端口

默认端口:8787

更改默认端口方法:

如果使用了.env文件,请在env文件中更改端口【APP_PORT】


如果没有使用.env文件:

请在\config\server.php 文件中更改:

'listen' => 'http://0.0.0.0:8787',

5.执行启动命令

(不知道命令的可以继续往下看)

6.愉快的访问后台吧:

http://127.0.0.1:8787/admin

用户名:admin

密码: 123456


7.配置伪静态(nginx转发[需要配置nginx反代]):

location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    if (!-f $request_filename){
        proxy_pass http://webman;
    }
}

8.配置网站的运行目录为:public

9.绑定域名

(不绑定域名请使用 ip+端口访问)

10.可以愉快的使用绑定的域名访问啦啦啦

忘记后台密码

如果忘记密码,或者密码不对,请修改数据库表:cmf_admin

password: 4d934790841a4d8575c21e86b5b3eb71

salt: VkMJ27

对应的明文密码为:123456

启动方式(命令)

windows开发环境

php windows.php start

Linux生产环境

php start.php start
php start.php start -d

平滑重启

php start.php reload

.env环境

请复制或者重命名一份.example.env 为 .evn文件。并编辑里面的数据库配置
如果是使用命令行安装的,则无需复制并编辑数据

orm使用think的。 数据库链接配置文件在:

config\thinkorm.php

nginx代理

伪静态

location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    if (!-f $request_filename){
        proxy_pass http://webman;
    }
}

当webman需要直接提供外网访问时,建议在webman前增加一个nginx代理,这样有以下好处。

  • 静态资源由nginx处理,让webman专注业务逻辑处理
  • 让多个webman共用80、443端口,通过域名区分不同站点,实现单台服务器部署多个站点
  • 能够实现php-fpm与webman架构共存
  • nginx代理ssl实现https,更加简单高效
  • 能够严格过滤外网一些不合法请求
upstream webman {
    server 127.0.0.1:8787;
    keepalive 10240;
}

server {
  server_name 站点域名;
  listen 80;
  root /your/webman/public;

  location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      if (!-f $request_filename){
          proxy_pass http://webman;
      }
  }
}

代码输出json数据

可以有以下2种方式:

方法1:

# 全局均可使用
return success_json();
return error_json();

方法2:

# 需要公公控制器先继承 \app\BaseController;
# 然后引入 public function __construct()
# 默认后台模块(admin)已继承,可直接使用。其他模块需要自行继承
return $this->success();
return $this->error();

error输出,可以在msg位置输出数组:['code'=>204,'msg'=>'error'],此时输出的json code值为对应的204


huiCmf后台基本模块:

  1. 管理员管理
  2. 权限节点管理
  3. 角色组管理
  4. 后台菜单管理
  5. 定时任务管理
  6. 数据库管理

【权限节点管理】

使用的是控制器注解权限来增加(删除)权限节点

【定时任务管理】

定时任务,使用的是后台自带的定时任务,类似宝塔定时任务管理功能

后台图片上传(选择图片框)

案例页面:【后台-上传测试页】

案例代码,请参考 app/admin/view/upload_test.html 文件

上传使用说明:

单图上传:

<div class="layui-form-item huicmf-upload">
   <label class="layui-form-label">头像</label>
   <div class="layui-input-inline" style="width: 50%">
      <input type="text" name="avatar" value=""
             onmouseover="hui_img_preview('avatar-select-input',this.value)"
             onmouseout="layer.closeAll();" id="avatar-select-input" autocomplete="off"
             class="layui-input">
   </div>
   <div class="layui-input-inline" style="width: 120px">
      <a class="layui-btn"
         data-open-pic="{:__url('index/file_list',['type'=>'one','select_id'=>'avatar-select-input'])}">
         <i class="layui-icon">&#xe67c;</i>选择图片
      </a>
   </div>
</div>

参数说明:

  1. 最顶部需要有class类名:huicmf-upload
  2. input回调框的代码中,hui_img_preview 里面的值和id值需要相同
  3. 点击按钮 a 标签 里面:

    打开选择框属性:data-open-pic="{:__url('index/file_list',['type'=>'one','select_id'=>'avatar-select-input'])}",其中:

    type=>'one' 意思是:单张图

    select_id' 意思是:需要传递回调数据表单的id字段


多图上传:

<div class="layui-form-item huicmf-upload">
   <label class="layui-form-label">多图选择</label>
   <div class="layui-input-block" style="margin-top: 15px;">
      <a class="layui-btn" data-open-pic="{:__url('index/file_list',['type'=>'more','select_id'=>'uploader-list'])}"><i class="layui-icon">&#xe67c;</i>选择图片</a>
      <div style="margin-top: 15px;">
         <small>(可拖拽图片调整显示顺序 )</small>
      </div>
      <!--回调显示选择的图片-->
      <div class="uploader-list am-cf" id="uploader-list" data-nums="3" ></div>
   </div>
</div>

注意:由于增加了多选图的数量判断(限制),需要注意以下代码:

<div class="uploader-list am-cf" data-nums="0"></div>

其中:data-nums参数为多图的数量(如果是添加,默认为0,如果是编辑,请传递后台图片数量到此值)

参数说明:

  1. 最顶部需要有class类名:huicmf-upload
  2. input回调框的代码中,hui_img_preview 里面的值和id值需要相同
  3. 点击按钮 a 标签 里面:

    打开选择框属性:data-open-pic="{:__url('index/file_list',['type'=>'more','select_id'=>'uploader-list'])}",其中:

    type=>'more' 意思是:单张图

    select_id' 意思是:需要传递回调数据的id

API接口开发

(如果不喜欢此接口开发,可以删掉api文件夹里的代码,自行开发自己的接口)

接口说明

接口的访问地址为:http://127.0.0.1:8787/api

请求方法: post

参数格式为:method 调用具体方法

其它参数:根据每个参数来定义。

需要登录的接口,可以用$this->userId获取当前访问用户id

$this->userId

需要登录的接口的接口必须传递参数 token

判断登录与否的标准就是是否在本地保存了token,如果保存了,就是登录状态,如果没有保存,就是未登录状态,需要登录的接口会自动带上token来进行请求数据。

api.php配置文件

config/api.php

新增接口均需要在此文件中增加接口配置

新增一个接口

新增接口时,需要先在api模块中增加一个接口控制器,所有接口控制器均要继承\app\api\controller\ApiController 控制器,如:

控制器名称需要使用完整名称,需要带上"Controller",如:TestController

例如:

namespace app\api\controller;
class TestController extends ApiController{
    public function list(){}
}

然后在接口配置文件 config\api.php 中定义下新增的接口

'test'=>[
    'code' => 'Test',
    'method'    =>  [
        'getlist' => [
            'code' => 'list',
            'is_login' => false
        ]
    ]
]

最外面的test是url地址调用的第一个参数
code对应的是接口控制器类名
method里面定义的是参数
getlist是外部访问的方法名,getlist里面code是Test控制器里面的具体方法名
is_login 含义为是否需要登录,当is_login 为true时,必须传token。可使用$this->userId 获取当前登录用户

公共接口

如果是一个公共数据接口,直接在 app\api\controller\CommonController.php 文件中写方法,任意请求方式访问:

http://你的域名/api.html/common/test 即可。

接口调用案例(以UserController为例):

基本信息

  • 接口URL: https://你的域名/api
  • 请求方式: POST
  • Content-Type: multipart/form-data

请求参数:

接口请求参数见下表:

Body参数说明 (multipart/form-data)

参数名 示例值 是否必填 参数描述
method user.login 必填 接口方法
username admin 必填 登录名
password admin 必填 密码

响应示例

正确响应示例

{
   "code": 200,
   "data": "c9d2343fd754ca12a9be33e957574cce",
   "msg": ""
}

错误响应示例


{
   "code": 0,
   "msg": "没有找到此账号",
   "data": ""
}

webman

High performance HTTP Service Framework for PHP based on Workerman.

Manual【文档】

https://www.workerman.net/doc/webman

Benchmarks

https://www.techempower.com/benchmarks/#section=test&runid=9716e3cd-9e53-433c-b6c5-d2c48c9593c1&hw=ph&test=db&l=zg24n3-1r&a=2
image

LICENSE

MIT


特别感谢

以下项目排名不分先后

PhpStorm logo
PhpStorm logo

版权信息

HuiCMF遵循Apache2.0开源协议发布,并允许商业使用。 本项目包含的第三方源码和二进制文件之版权信息另行标注。 版权所有Copyright © 2019-2022 by
xiaohuihui (https://xiaohuihui.net.cn)
All rights reserved。

免责声明

HuiCMF遵循Apache2.0开源协议发布,并允许商业使用。任何用户在使用HuiCMF后台框架前,请您仔细阅读并透彻理解本声明。您可以选择不使用HuiCMF后台框架,若您一旦使用HuiCMF
后台框架,您的使用行为即被视为对本声明全部内容的认可和接受。

仅供技术研究使用,请勿用于非法用途,否则产生的后果作者概不负责。

  • HuiCMF后台框架是一款开源免费的后台快速开发框架 ,主要用于更便捷地开发后台管理;其尊重并保护所有用户的个人隐私权,不窃取任何用户计算机中的信息。更不具备用户数据存储等网络传输功能。
  • 您承诺秉着合法、合理的原则使用HuiCMF后台框架,不利用HuiCMF后台框架进行任何违法、侵害他人合法利益等恶意的行为,亦不将HuiCMF后台框架运用于任何违反我国法律法规的 Web 平台。
  • 任何单位或个人因下载使用HuiCMF后台框架而产生的任何意外、疏忽、合约毁坏、诽谤、版权或知识产权侵犯及其造成的损失 (包括但不限于直接、间接、附带或衍生的损失等),本开源项目不承担任何法律责任。
  • 用户明确并同意本声明条款列举的全部内容,对使用HuiCMF后台框架可能存在的风险和相关后果将完全由用户自行承担,本开源项目不承担任何法律责任。
  • 任何单位或个人在阅读本免责声明后,应在《MIT 开源许可证》所允许的范围内进行合法的发布、传播和使用HuiCMF后台框架等行为,若违反本免责声明条款或违反法律法规所造成的法律责任(包括但不限于民事赔偿和刑事责任),由违约者自行承担。
  • 如果本声明的任何部分被认为无效或不可执行,其余部分仍具有完全效力。不可执行的部分声明,并不构成我们放弃执行该声明的权利。
  • 本开源项目有权随时对本声明条款及附件内容进行单方面的变更,并以消息推送、网页公告等方式予以公布,公布后立即自动生效,无需另行单独通知;若您在本声明内容公告变更后继续使用的,表示您已充分阅读、理解并接受修改后的声明内容。
3171 6 4
6个评论

江月闲谈

👍🏻

liziyu

很赞,赞,赞~

super_zlq

奈斯

  • 暂无评论
admin2

php 7.4.3 执行composer update 超时,要切换到哪个镜像才行啊(目前用的是腾讯镜像)

  • xianrenqh 2022-07-08

    运行 composer config -g --unset repos.packagist 取消composer代理试下

uspear

666

  • 暂无评论
xianrenqh

啦啦啦

  • 暂无评论

xianrenqh

610
积分
0
获赞数
0
粉丝数
2022-04-25 加入
🔝