企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 目录结构 ![](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`中应用数据表前缀相对应 * 若有其他自定义数据涉及应用名,请一起修改