# 目录结构
![](https://img.kancloud.cn/13/d0/13d0a22ffceee982851c6800e4f13d16_441x897.png)
# 开发规范
## 1.配置文件
`config/Version.php`文件
~~~
<?php
/**
* types 应用类型 参数:mini_program=微信小程序,app=APP(安卓和IOS),h5=H5移动端网页,official=公众号,system=系统,tt_program=头条小程序
* version 应用版本好
* name 应用名称
* describe 应用描述
* is_openapp 0开放平台、1单独对接 微信小程序是否使用微信第三方开放平台授权管理(https://open.weixin.qq.com/)
* is_manage 启用总平台管理 0关闭1启用【暂时没有用,为以后扩展总平台一键登录租户账号用】
* is_wechat_pay 是否支持 微信支付 0、1
* is_alipay_pay 是否支持 支付宝支付 0、1
* database.prefix 应用的数据库表前缀如 bw_bwmall_config,中间的bwmall就是此应用表的标识,要保证全平台唯一
*/
return [
'types' => 'mini_program,h5,official,app,tt_program',
'version' => '2.3.2',
'title' => '名牛云商城',
'describe' => "购物,分销,裂变",
'is_openapp' => 0,
'is_manage' => 1,
'is_wechat_pay' => 1,
'is_alipay_pay' => 0,
'database' => [
'prefix' => 'bwmall_'
]
];
~~~
## 2.控制器目录Controller
### **目录规划建议**
如bwmall应用,有两个admin和api目录
![](https://img.kancloud.cn/35/9f/359f11b76007364bdff5e681bec27c7e_300x629.png)
#### admin目录用于租户后台商城应用管理功能及API接口对接
#### api目录用于租户后台商城应用用户端(微信小程序,H5等等终端)的API接口对接
### **控制器基类**
建议创建应用控制器时,分别创建admin和api的控制器基类,以完成应用内个性化设计开发
如:bwmall/controller/admin/Basic.php和bwmall/controller/api/Basic.php
### **使用join查询等需要用到数据表名时**
需要用到数据库表名建议使用 `config('version.database.prefix')` 拼接,这将有助于 **应用克隆**
~~~
//例如:
$count = $this->model
->alias('user')
->join(config('version.database.prefix') . 'coupon coupon', 'user.cid = coupon.id')
->where('coupon.member_id', $this->user->top_id)
->where($where)
->count();
~~~
### **验证器**
[查看参数验证器使用](https://www.kancloud.cn/hnlg666/bwsaas/3158521)
### **默认增删改查 trait**
后台使用Curd trait, 能大大提高开发效率以及代码的可复用性, 文件位置:`buwang/traits/Curd.php`
> 默认的CURD方法有:
| 参数 | 说明 |
| --- | --- |
| index | 列表 |
| add | 添加 |
| edit | 编辑 |
| delete | 删除 |
| export | 导出 |
| modify | 属性修改 |
> 使用方法:
在类里面引入`use buwang\traits\Crud;`
详细的方法内容,自行查看源码
~~~
<?php
namespace app\manage\controller;
use buwang\base\AdminBaseController;
use buwang\traits\Crud;
class CrudDemo extends AdminBaseController
{
use Crud;
protected $model = null;//模型实例
protected function initialize()
{
parent::initialize();
$this->layout && $this->app->view->engine()->layout($this->layout);
$this->model = new \app\manage\model\CrudDemo();
}
public function index(){
$uploadConfig = \app\common\model\Config::getConfigData('storage');
return $this->success('success',$uploadConfig );
}
}
~~~
## 3.模型Model
### 模型基类
建议创建一个应用模型基类,以完成应用内模型个性化设置
### 模型名 `name`
> 常量`MINIAPP_DATABASE_PREFIX` 已在系统事件`RouteLoaded` 中设置,需在`config/version.php` 文件中设置应用表前缀
模型名请参照如下设置方式,这将有助于 **应用克隆**
~~~
protected $name = MINIAPP_DATABASE_PREFIX . "shop_product";
~~~
###
## 3.前端View
### 路由url规范
> url中涉及到应用名时使用 `{$adminModuleName}` 替代,这将有助于 **应用克隆**
~~~
bwajax.post('{$adminModuleName}/admin.BwmallShopProduct/getCategory', {checked_ids: '{$row.cate_id? $row.cate_id : 0}'}).then(function (response) {
console.log(response.data);
}
~~~
## 4.路由Router
框架已启用强制路由,请不要忘记定义路由地址
## 5.应用配置和组合数据使用
因为每个应用是独立的,同时他们的配置和组合数据表也是独立的,如果你用到了配置和组合数据,则需要建对应的应用配置表和model,表结构与系统配置和组合数据表一样
### 配置和组合数据表结构
> 应用配置和组合数据表的四张表的结构和命名规范如下:
> 配置设置表:\[数据库表前缀\]\_\[应用标识\]\_config
>
> 举例: 如果服务器数据库前缀为 bw, 应用标识为 bwmall,则最终的表名为bw\_bwmall\_config
>
> 表结构如下:
~~~
CREATE TABLE `bw_bwmall_config` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '配置id',
`config_name` varchar(255) NOT NULL COMMENT '字段名称',
`tab_name` varchar(255) NOT NULL DEFAULT '' COMMENT '配置分类英文标识',
`type` varchar(255) NOT NULL DEFAULT '' COMMENT '类型(文本框,单选按钮...)',
`input_type` varchar(20) DEFAULT 'input' COMMENT '表单类型',
`tab_id` int(10) unsigned NOT NULL COMMENT '配置分类id',
`parameter` varchar(255) DEFAULT NULL COMMENT '单选框和多选框参数',
`upload_type` tinyint(1) unsigned DEFAULT NULL COMMENT '上传格式1单图2多图3文件',
`rule` varchar(255) DEFAULT NULL COMMENT '验证规则',
`message` varchar(255) DEFAULT NULL COMMENT '验证规则错误提示',
`width` int(10) unsigned DEFAULT NULL COMMENT '多行文本框的宽度',
`high` int(10) unsigned DEFAULT NULL COMMENT '多行文框的高度',
`value` varchar(5000) DEFAULT NULL COMMENT '默认值',
`info` varchar(255) NOT NULL DEFAULT '' COMMENT '配置名称',
`desc` varchar(255) DEFAULT NULL COMMENT '配置简介',
`sort` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
`status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否隐藏0正常1隐藏',
`member_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '租户Id(0为总后台管理员创建,不为0的时候是租户创建)',
`scopes` varchar(30) NOT NULL DEFAULT 'common' COMMENT '配置范围common通用member租户',
`disabled` tinyint(1) unsigned NOT NULL DEFAULT '2' COMMENT '是否锁值:1是2否',
`lazy` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否懒加载:1是2否',
`dir` varchar(100) DEFAULT NULL COMMENT '应用标识',
`plugin_name` varchar(100) DEFAULT NULL COMMENT '插件标识',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `config_name` (`config_name`,`member_id`,`dir`) USING BTREE,
KEY `type` (`type`),
KEY `tab_id` (`tab_id`),
KEY `input_type` (`input_type`),
KEY `member_id` (`member_id`),
KEY `sort` (`sort`),
KEY `status` (`status`),
KEY `scopes` (`scopes`),
KEY `disabled` (`disabled`),
KEY `lazy` (`lazy`)
) ENGINE=InnoDB AUTO_INCREMENT=14054 DEFAULT CHARSET=utf8 COMMENT='bwmall配置设置表';
~~~
> 配置分组数据字段表:\[数据库表前缀\]\_\[应用标识\]\_config\_group
>
> 举例: 如果服务器数据库前缀为 bw, 应用标识为 bwmall,则最终的表名为bw\_bwmall\_config\_group
>
> 表结构如下:
~~~
CREATE TABLE `bw_bwmall_config_group` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '组合数据ID',
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '数据组名称',
`desc` varchar(256) NOT NULL DEFAULT '' COMMENT '数据说明',
`config_name` varchar(255) NOT NULL DEFAULT '' COMMENT '数据字段',
`fields` text COMMENT '数据组字段以及类型(json数据)',
`scopes` varchar(30) NOT NULL DEFAULT 'common' COMMENT '配置范围common通用member租户',
`dir` varchar(100) DEFAULT NULL COMMENT '应用标识',
`plugin_name` varchar(100) DEFAULT NULL COMMENT '插件标识',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `config_name` (`config_name`,`dir`) USING BTREE,
KEY `scopes` (`scopes`)
) ENGINE=InnoDB AUTO_INCREMENT=126 DEFAULT CHARSET=utf8 COMMENT='bwmall分组数据字段表';
~~~
> 数据组合键值表:\[数据库表前缀\]\_\[应用标识\]\_config\_group\_data
>
> 举例: 如果服务器数据库前缀为 bw, 应用标识为 bwmall,则最终的表名为bw\_bwmall\_config\_group\_data
>
> 表结构如下:
~~~
CREATE TABLE `bw_bwmall_config_group_data` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '组合数据详情ID',
`group_id` int(11) NOT NULL DEFAULT '0' COMMENT '对应的数据组id',
`value` text NOT NULL COMMENT '数据字段对应的(json)数据值',
`add_time` int(10) NOT NULL DEFAULT '0' COMMENT '新增时间',
`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态(1:开启;2:关闭;)',
`member_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '租户Id(0为总后台管理员创建,不为0的时候是租户创建)',
`scopes` varchar(30) NOT NULL DEFAULT 'common' COMMENT '配置范围common通用member租户',
`config_name` varchar(255) NOT NULL DEFAULT '' COMMENT '数据字段',
`dir` varchar(100) DEFAULT NULL COMMENT '应用标识',
`plugin_name` varchar(100) DEFAULT NULL COMMENT '插件标识',
PRIMARY KEY (`id`) USING BTREE,
KEY `group_id` (`group_id`),
KEY `sort` (`sort`),
KEY `status` (`status`),
KEY `member_id` (`member_id`),
KEY `scopes` (`scopes`)
) ENGINE=InnoDB AUTO_INCREMENT=8666 DEFAULT CHARSET=utf8 COMMENT='bwmall数据组合键值表';
~~~
> 配置分类表:\[数据库表前缀\]\_\[应用标识\]\_config\_tab
>
> 举例: 如果服务器数据库前缀为 bw, 应用标识为 bwmall,则最终的表名为bw\_bwmall\_config\_tab
>
> 表结构如下:
~~~
CREATE TABLE `bw_bwmall_config_tab` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '配置分类id',
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '配置分类名称',
`tab_name` varchar(255) NOT NULL DEFAULT '' COMMENT '配置分类英文标识',
`icon` varchar(30) DEFAULT NULL COMMENT '图标',
`type` int(2) DEFAULT '0' COMMENT '配置类型',
`is_show` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '配置分类是否显示 0不显示,1显示',
`scopes` varchar(30) NOT NULL DEFAULT 'common' COMMENT '配置范围common通用member租户',
`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
`desc` text COMMENT '配置说明',
`dir` varchar(100) DEFAULT NULL COMMENT '应用标识',
`plugin_name` varchar(100) DEFAULT NULL COMMENT '插件标识',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `tab_name` (`tab_name`,`dir`) USING BTREE,
KEY `type` (`type`),
KEY `is_show` (`is_show`),
KEY `scopes` (`scopes`)
) ENGINE=InnoDB AUTO_INCREMENT=104 DEFAULT CHARSET=utf8 COMMENT='bwmall配置分类表';
~~~
### 配置和组合数据模型基类
> 应用配置需要在应用目录: \[ 应用根目录 \] \\ model \\ system \\ 下创建对应的四个配置model
![](https://img.kancloud.cn/e1/0e/e10e5b7042328a1c7099530a2b01da7f_575x340.png)
> Config.php
~~~
<?php
// +----------------------------------------------------------------------
// | Bwsaas
// +----------------------------------------------------------------------
// | Copyright (c) 2015~2020 http://www.buwangyun.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Gitee ( https://gitee.com/buwangyun/bwsaas )
// +----------------------------------------------------------------------
// | Author: buwangyun <hnlg666@163.com>
// +----------------------------------------------------------------------
// | Date: 2020-9-28 10:55:00
// +----------------------------------------------------------------------
namespace app\你的应用目录名\model\system;
use buwang\base\BaseModel;
use buwang\traits\JwtTrait;
/**配置表
* Class BwAuthNode
* @package app\manage\model
*/
class Config extends BaseModel
{
use JwtTrait;
protected $pk = 'id';
// 表名
protected $name = MINIAPP_DATABASE_PREFIX .'config';
protected $updateTime = '';
protected $deleteTime = '';
}
~~~
> ConfigGroup.php
~~~
<?php
// +----------------------------------------------------------------------
// | Bwsaas
// +----------------------------------------------------------------------
// | Copyright (c) 2015~2020 http://www.buwangyun.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Gitee ( https://gitee.com/buwangyun/bwsaas )
// +----------------------------------------------------------------------
// | Author: buwangyun <hnlg666@163.com>
// +----------------------------------------------------------------------
// | Date: 2020-9-28 10:55:00
// +----------------------------------------------------------------------
namespace app\你的应用目录名\model\system;
use buwang\base\BaseModel;
/** 配置组
* Class ConfigGroup
* @package app\manage\model
*/
class ConfigGroup extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = MINIAPP_DATABASE_PREFIX.'config_group';
}
~~~
> ConfigGroupData.php
~~~
<?php
// +----------------------------------------------------------------------
// | Bwsaas
// +----------------------------------------------------------------------
// | Copyright (c) 2015~2020 http://www.buwangyun.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Gitee ( https://gitee.com/buwangyun/bwsaas )
// +----------------------------------------------------------------------
// | Author: buwangyun <hnlg666@163.com>
// +----------------------------------------------------------------------
// | Date: 2020-9-28 10:55:00
// +----------------------------------------------------------------------
namespace app\你的应用目录名\model\system;
use buwang\base\BaseModel;
use buwang\traits\JwtTrait;
use app\manage\model\Member;
use app\common\model\MemberMiniapp;
use buwang\util\Util;
/** 配置组数据
* Class ConfigGroup
* @package app\manage\model
*/
class ConfigGroupData extends BaseModel
{
use JwtTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = MINIAPP_DATABASE_PREFIX.'config_group_data';
}
~~~
> ConfigTab.php
~~~
<?php
// +----------------------------------------------------------------------
// | Bwsaas
// +----------------------------------------------------------------------
// | Copyright (c) 2015~2020 http://www.buwangyun.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Gitee ( https://gitee.com/buwangyun/bwsaas )
// +----------------------------------------------------------------------
// | Author: buwangyun <hnlg666@163.com>
// +----------------------------------------------------------------------
// | Date: 2020-9-28 10:55:00
// +----------------------------------------------------------------------
namespace app\你的应用目录名\model\system;
use buwang\base\BaseModel;
use buwang\traits\JwtTrait;
/**配置分类表
* Class BwAuthNode
* @package app\manage\model
*/
class ConfigTab extends BaseModel
{
protected $pk = 'id';
// 表名
protected $name = MINIAPP_DATABASE_PREFIX.'config_tab';
protected $updateTime = '';
protected $deleteTime = '';
}
~~~
### 配置和组合数据创建和使用
举个栗子,假设有这样一种使用场景:你应用里需要一个开关变量,就可以用应用配置实现
![](https://img.kancloud.cn/72/53/7253b5c220a6b9b176cf38944d7cd9b4_1504x943.png)
## 6.应用的安装和卸载
###
> `install` 目录是应用的安装目录,应用安装所需文件需放在这里,如静态资源、节点菜单、数据表安装语句等
### `命令行快速打包生成zip文件`
> 用命令生成对应的应用完整zip包会放在 \[ 项目根节点 \] / public / \[ 应用标识 \].zip,应用开发者需要将 生成的文件 放到到 应用 应用根目录下解压覆盖,再根据需要将已生成的安装文件进行调整
>
> 后期维护过程中,增加或减少功能时,再用命令生成并进行微调即可(CV大法好)
#### 生成指令
> **php think package -a \[应用标识\]**
>
> **php think package --app \[应用标识\]**
>
> **以上两种方式都可以**
> **假设应用标识为 bwmall**
![](https://img.kancloud.cn/05/a9/05a9537999376b063dac9d07c4bb103f_927x475.png)
> 以上指令会生成应用目录bwmall对应的布网商城应用的应用安装文件
#### 生成的文件
![](https://img.kancloud.cn/48/05/480516a3589c2dbf03448edd0c88849f_1263x419.png)
#### \[C/V\]迁移生成的文件
![](https://img.kancloud.cn/d1/b1/d1b1b5a070032e94a068fd5a7070e506_1650x659.png)
####
### 安装文件说明
#### `static` 目录
> 该目录下所有文件都会被复制到 `public/static/应用目录名` 下,所以请将静态资源放在这里
* `logo.png` 应用logo,必需
* `style.png` 应用示例,必须
#### `应用配置`
> 如果在应用的开发过程中使用了配置(使用了 \[ 配置分类 \]->\[ 添加配置 \] )添加了一些应用配置
>
> 相关插入sql, 调用生成指令时会自动写入 install.sql
>
> 如果自己手动编写应用安装文件时需要将用到的sql语句新进 install.sql中
**应用配置sql比较繁琐,不建议手写,直接调用打包指令生成就好**
**比如: 布网商城的拼团配置**
![](https://img.kancloud.cn/eb/8c/eb8c7cb2cb34c84c39b8ce2d1b35f5f3_746x278.png)
**则对应在install.sql中应写入以下sql**
~~~
INSERT INTO `__BWPREFIX__bwmall_config_tab` SET `title` = '拼团配置' , `tab_name` = 'pink_config' , `icon` = 'fa fa-cart-plus' , `type` = 3 , `is_show` = 1 , `scopes` = 'member' , `sort` = 0 , `desc` = '' , `dir` = 'bwmall';
INSERT INTO `__BWPREFIX__bwmall_config` SET `config_name` = 'home_background_pink_img' , `tab_name` = 'pink_config' , `type` = 'upload' , `input_type` = 'text' , `tab_id` = 53 , `parameter` = '' , `upload_type` = 1 , `rule` = '' , `message` = '' , `width` = 100 , `high` = 200 , `value` = '{\"name\":\"banner(3).png\",\"size\":0,\"type\":\"image\\/png\",\"src\":\"https:\\/\\/oss.buwangyun.com\\/upload\\/20201014\\/b25b9dc99f1badbb4ce34dc292fd1cff.png\"}' , `info` = '拼团背景图片' , `desc` = '拼团背景图片' , `sort` = 0 , `status` = 0 , `member_id` = 0 , `scopes` = 'member' , `disabled` = 2 , `lazy` = 2 , `dir` = 'bwmall';
INSERT INTO `__BWPREFIX__bwmall_config` SET `config_name` = 'pink_poster_url' , `tab_name` = 'pink_config' , `type` = 'text' , `input_type` = 'text' , `tab_id` = 53 , `parameter` = '' , `upload_type` = 1 , `rule` = '' , `message` = '' , `width` = 100 , `high` = 200 , `value` = 'http://wx473ce4dceb809572.mall.buwangkeji.com/#/pages/discover/combination_status' , `info` = '拼团分享海报路由' , `desc` = '拼团分享海报路由' , `sort` = 0 , `status` = 0 , `member_id` = 0 , `scopes` = 'member' , `disabled` = 2 , `lazy` = 2 , `dir` = 'bwmall';
INSERT INTO `__BWPREFIX__bwmall_config` SET `config_name` = 'miniapp_config' , `tab_name` = 'pink_config' , `type` = 'text' , `input_type` = 'text' , `tab_id` = 53 , `parameter` = '' , `upload_type` = 1 , `rule` = '' , `message` = '' , `width` = 100 , `high` = 200 , `value` = 'pages/index/index' , `info` = '小程序二维码url' , `desc` = '小程序二维码url' , `sort` = 0 , `status` = 0 , `member_id` = 0 , `scopes` = 'member' , `disabled` = 2 , `lazy` = 2 , `dir` = 'bwmall';
INSERT INTO `__BWPREFIX__bwmall_config` SET `config_name` = 'is_pink_build' , `tab_name` = 'pink_config' , `type` = 'radio' , `input_type` = 'text' , `tab_id` = 53 , `parameter` = '是=>1
否=>2' , `upload_type` = 1 , `rule` = '' , `message` = '' , `width` = 100 , `high` = 200 , `value` = '2' , `info` = '二维码重新生成' , `desc` = '二维码是否重新生成,如果选【是】,则每次生成的推广海报都重新生成二维码' , `sort` = 0 , `status` = 0 , `member_id` = 0 , `scopes` = 'member' , `disabled` = 2 , `lazy` = 2 , `dir` = 'bwmall';
~~~
#### `应用组合配置`
> 如果在应用的开发过程中使用了组合数据(使用了 \[ 组合配置 \]->\[ 组合分类 \]->\[ 添加数据组 \] )添加了一些应用组合数据,则需要将这些配置写进install.sql中 ,标识你使用了哪些组合数据。
>
> 相关组合数据和插入sql 调用生成指令时会自动写入 install.sql
>
> 如果自己手动编写应用安装文件时需要将用到的sql语句新进 install.sql中
`**应用组合数据sql**`**不建议手写,,直接调用打包指令生成后cv大法就好**
**比如: 布网商城的组合数据**
![](https://img.kancloud.cn/ad/80/ad806f473d07dda49c016dbfb2588a35_746x559.png)
![](https://img.kancloud.cn/8d/a3/8da3316d2779e5717793f80076ac8a6f_746x225.png)
**则对应在install.sql中应写入以下sql**
~~~
INSERT INTO `__BWPREFIX__bwmall_config_group` SET `name` = 'bwmall首页展示分类' , `desc` = 'bwmall首页展示分类' , `config_name` = 'shop_home_category' , `fields` = '[{\"id\":\"5f46019305c14\",\"info\":\"商城分类id\",\"config_name\":\"category_id\",\"desc\":\"无效的商品分类id(分类不存在或分类无效)不展示\",\"must\":\"1\",\"input_type\":\"number\",\"rule\":\"\",\"message\":\"\",\"value\":\"\",\"width\":\"100\",\"high\":\"200\",\"parameter\":\"\",\"upload_type\":\"1\",\"type\":\"text\"}]' , `scopes` = 'member' , `dir` = 'bwmall';
INSERT INTO `__BWPREFIX__bwmall_config_group_data` SET `group_id` = 82 , `value` = '{\"category_id\":{\"type\":\"number\",\"value\":\"31\"}}' , `add_time` = 1601465265 , `sort` = 0 , `status` = 2 , `member_id` = 0 , `scopes` = 'member' , `config_name` = 'shop_home_category' , `dir` = 'bwmall';
INSERT INTO `__BWPREFIX__bwmall_config_group_data` SET `group_id` = 82 , `value` = '{\"category_id\":{\"type\":\"number\",\"value\":\"30\"}}' , `add_time` = 1601465291 , `sort` = 0 , `status` = 2 , `member_id` = 0 , `scopes` = 'member' , `config_name` = 'shop_home_category' , `dir` = 'bwmall';
INSERT INTO `__BWPREFIX__bwmall_config_group_data` SET `group_id` = 82 , `value` = '{\"category_id\":{\"type\":\"number\",\"value\":\"29\"}}' , `add_time` = 1601465308 , `sort` = 0 , `status` = 2 , `member_id` = 0 , `scopes` = 'member' , `config_name` = 'shop_home_category' , `dir` = 'bwmall';
INSERT INTO `__BWPREFIX__bwmall_config_group_data` SET `group_id` = 82 , `value` = '{\"category_id\":{\"type\":\"number\",\"value\":\"49\"}}' , `add_time` = 1601465353 , `sort` = 0 , `status` = 2 , `member_id` = 0 , `scopes` = 'member' , `config_name` = 'shop_home_category' , `dir` = 'bwmall';
INSERT INTO `__BWPREFIX__bwmall_config_group_data` SET `group_id` = 82 , `value` = '{\"category_id\":{\"type\":\"number\",\"value\":\"45\"}}' , `add_time` = 1601465364 , `sort` = 0 , `status` = 2 , `member_id` = 0 , `scopes` = 'member' , `config_name` = 'shop_home_category' , `dir` = 'bwmall';
INSERT INTO `__BWPREFIX__bwmall_config_group_data` SET `group_id` = 82 , `value` = '{\"category_id\":{\"type\":\"number\",\"value\":\"48\"}}' , `add_time` = 1601465375 , `sort` = 0 , `status` = 2 , `member_id` = 0 , `scopes` = 'member' , `config_name` = 'shop_home_category' , `dir` = 'bwmall';
INSERT INTO `__BWPREFIX__bwmall_config_group_data` SET `group_id` = 82 , `value` = '{\"category_id\":{\"type\":\"number\",\"value\":\"46\"}}' , `add_time` = 1601465388 , `sort` = 0 , `status` = 2 , `member_id` = 0 , `scopes` = 'member' , `config_name` = 'shop_home_category' , `dir` = 'bwmall';
INSERT INTO `__BWPREFIX__bwmall_config_group_data` SET `group_id` = 82 , `value` = '{\"category_id\":{\"type\":\"number\",\"value\":\"44\"}}' , `add_time` = 1601465401 , `sort` = 0 , `status` = 2 , `member_id` = 0 , `scopes` = 'member' , `config_name` = 'shop_home_category' , `dir` = 'bwmall';
INSERT INTO `__BWPREFIX__bwmall_config_group_data` SET `group_id` = 82 , `value` = '{\"category_id\":{\"type\":\"number\",\"value\":\"33\"}}' , `add_time` = 1601465413 , `sort` = 0 , `status` = 2 , `member_id` = 0 , `scopes` = 'member' , `config_name` = 'shop_home_category' , `dir` = 'bwmall';
~~~
#### `listen.php` 文件
> 应用编写时需要监听一些框架事件,并做自己的逻辑处理
>
> 比如当通过框架小程序接口用户注册进来后,你需要给自己的应用做自己的独有逻辑处理(用户会员等级初始化,给推广人奖励等等...)
>
> 这就需要监听到 \[ 用户注册 \] 和 \[ 用户登录 \] 等事件
>
> 应用对框架事件的监听就需要在 listen.php 文件中配置才能监听并处理相关事件
`listen.php`**文件****建议手写****,在需要对框架某些事件进行监听并处理时配置**
#### 目前可监听的事件标识
miniappInstallSuccess安装应用事件miniappBuySuccess购买应用事件userRegisterSuccess用户注册成功后事件userUpdateSuccess用户更新登录信息事件userLoginSuccess用户登录成功事件userExtractSuccess用户提现成功事件userExtractFail用户提现失败事件userRechargeSuccess用户充值成功事件userRechargeFail用户充值失败事件miniappAuthNotify小程序认证回调事件miniappUpdateSuccess应用版本更新回调事件
**随着开发维护会增加相关框架事件**
~~~
<?php
/**
* 填写需要调用的事件函数
* 当前可用事件 userRegisterSuccess:用户注册事件,userLoginSuccess 用户登录事件,miniappInstallSuccess:应用安装事件,miniappBuySuccess:购买应用成功事件,
* 方法传参 array $event
* 格式:['class'=>'调用的方法所在的类(类构造方法不能带参),没有传null','method'=>'方法名','scope'=>'方法类型 (字符串:static:类方法 object 对象方法 common公共方法)']
*/
return [
'userRegisterSuccess'=>[ //注册用户事件 注册用户时调用的应用指定方法,比如需要添加用户附表
'class'=> app\heluo\model\admin\BwmallUser::class,
'method'=>'createMallUser',
'scope'=>'static',//static:类方法 object 对象方法 common公共方法
]
];
~~~
#### `menu.php` 文件
> 应用的模块(管理组)和菜单节点都在这里
* 应用 **至少** 需要一个基础功能,功能内 **至少** 要有一个节点
* 框架会为每个应用自动添加 `公众号管理` 和 `小程序管理功能`
* 文件内涉及到应用目录名的,请使用 `$dir` 替代,这将有助于 **应用克隆**
> 常量 `MINIAPP_DIR` 在应用安装时由框架设置
~~~
<?php
$dir = MINIAPP_DIR;
return [
[
//角色名称/功能名称
'name' => "{$dir}基础功能",
//约定固定写法,角色唯一标识,不可重复;基础功能就写"{$dir}_base",附加功能就写"{$dir}_tools",附加功能可以有多个,【20230513之后新版本会采用此值、、{$dir}_base,展示租户购买应用时的必选必购功能】
'group_name' => "{$dir}_base",
//角色备注/功能描述
'remark' => '',
//功能类型:1=基础功能,2=附加功能,2类型的可以有多少【20230513之后新版本已经弃用】
'module_type' => '1',
//功能价格【20230513之后新版本已经弃用】
'module_price' => 0,
//角色拥有的节点
'nodes' => [
[
"title" => '主页',
//菜单url
"menu_path" => "/{$dir}/admin/index",
//实际
"name" => "/{$dir}/admin.Index/index",
//权限标识,
"auth_name" => '',
//附加参数 ?id=1&name=demo
"param" => '',
//打开方式
"target" => '_self',
//是否菜单 1=是,0=否
"ismenu" => '1',
//图标
"icon" => 'fa fa-file',
//备注
"remark" => '',
//子节点
'children' => []
]
]
]
];
~~~
#### `install.sql` 文件
> 该文件存储的是应用的数据表安装语句,在应用安装时会导入该语句
### 卸载文件说明
> `uninstall` 目录是应用的卸载目录,应用的数据库卸载语句需放在这里,应用卸载时会自动调用
* 在总后台将应用关闭后,将会出现卸载按钮
* 当应用被租户购买后,无法卸载
#### `uninstall.sql`文件
> 该文件存储的是应用的数据表卸载语句,在应用卸载时会导入该语句
# 应用克隆
> 请遵守应用开发规范,这将有助你快速进行应用克隆
## 1.应用目录名
* 复制应用,并将应用目录名修改为你想要的名字
## 2.命名空间
* 批量修改控制器和模型的命名空间,命名空间需与应用目录名对应
## 3.应用配置文件verison.php
* 修改为自己想要的内容,应用数据表前缀没有则设置为 `''`
## 4.install.sql
* 批量修改表名,表名与 `config/verison.php`中应用数据表前缀相对应
* 若有其他自定义数据涉及应用名,请一起修改
## 5.uninstall.sql
* 批量修改表名,表名与 `config/verison.php`中应用数据表前缀相对应
* 若有其他自定义数据涉及应用名,请一起修改