## 模块开发流程 > ​ 在安装插件过程中会执行插件根目录上的Install.php 文件进行初始化。卸载插件会执行Uninstall.php,进行卸载事件处理。在系统中添加插件更新配置,会触发系统更新配置写入数据库中。修改完毕配置后需要手动取插件列表更新配置或者卸载重新安装,不然配置是不会生效的, ### 创建/维护 进入后台 - 系统管理 - 应用管理 - 设计新插件 > 创建成功后会在 根目录的 addons 目录下生成插件文件 ### 插件后台配置/权限 请在创建的模块下的 common/backend.php 的各自应用文件内手动填写,安装后会自动注册进系统权限管理和菜单配置 例如: ```php $common = file_exists(__DIR__ . '/common.php') ? require __DIR__ . '/common.php' : []; $backend = [ // ----------------------- 菜单配置 ----------------------- // 'config' => [ // 菜单配置 'menu' => [ 'location' => 'default', // default:系统顶部菜单;addons:应用中心菜单 'icon' => 'fa fa-puzzle-piece', ], // 子模块配置 'modules' => [ ], ], // ----------------------- 快捷入口 ----------------------- // 'cover' => [ ], // ----------------------- 菜单配置 ----------------------- // 'menu' => [ [ 'title' => '股东管理', 'route' => 'default/index', 'icon' => '', 'params' => [ ], 'child' => [ ], ], [ 'title' => '股东等级', 'route' => 'level/index', 'icon' => '', 'params' => [ ], 'child' => [ ], ], [ 'title' => '提成明细', 'route' => 'commission/index', 'icon' => '', 'params' => [ ], 'child' => [ ], ], [ 'title' => '基础配置', 'route' => 'setting/index', 'icon' => '', 'params' => [ ], 'child' => [ ], ], ], // ----------------------- 权限配置 ----------------------- // 'authItem' => [ [ 'title' => '所有权限', 'name' => '', ], ], ]; return array_merge($common,$backend); ``` 请在创建的模块下的 common/api.php 的各自应用文件内手动填写,安装后会自动注册进系统前端UR和其他配置 例如: ```php // ----------------------- 菜单配置 ----------------------- // 'config' => [ // 菜单配置 'menu' => [ 'location' => 'default', // default:系统顶部菜单;addons:应用中心菜单 'icon' => 'fa fa-puzzle-piece', ], // 子模块配置 'modules' => [ 'v1' => [ 'class' => 'addons\Boss\api\modules\v1\Module', ], 'v2' => [ 'class' => 'addons\Boss\api\modules\v2\Module', ], ], ], ``` 请在创建的模块下的 common/common.php 的各自应用文件内手动填写,安装后会自动注册进系统API链接和处理事件 ```php return [ // ----------------------- API链接 ----------------------- // 'links' => [ [ 'title' => '分红详情', 'route' => '/addons/boss/index', 'icon' => '', 'params' => [] ], [ 'title' => '分红权益', 'route' => '/addons/boss/rights', 'icon' => '', 'params' => [] ], ], // ----------------------- 事件处理 ----------------------- // 'events' => [ [ 'event_name' => 'order_pay', 'listeners' => [ 'addons\Boss\common\listeners\OrderPaidListener', ] ], [ 'event_name' => 'order_finish',//订单完成 'listeners' => [ 'addons\Boss\common\listeners\OrderFinishListener', ] ] ], ]; ``` 查看设置权限:系统管理->用户权限->角色管理->创建/编辑 ### 数据迁移 可以用系统自带的开发工具插件生成对应的数据迁移文件,并遵循系统规范进行数据安装 ### 继承的基类说明 ##### 后台 默认继承插件各自内自动生成的 BaseController,如果自己有特殊需求可以修改继承 默认 BaseController 渲染的视图会自动载入左侧菜单,如果不需要请在 BaseController 里加入以下代码 ``` /** * @var string */ public $layout = "@backend/views/layouts/main"; ``` ##### api > 注意:开发 api 的时候能使用 restful 的基类,但是不受路由规则管辖 - 控制器请全部继承 `api\controllers\OnAuthController`,注意Curd是改过的,不想用系统的Curd可直接继承 `api\controllers\ActiveController`,如果设置控制器内方法不需要验证请设置 `authOptional` 属性 - 用户私有控制器请全部继承 `api\controllers\UserAuthController` ##### merapi > 注意:开发 merapi 的时候能使用 restful 的基类,但是不受路由规则管辖 - 控制器请全部继承 `merapi\controllers\OnAuthController`,注意Curd是改过的,不想用系统的Curd可直接继承 `merapi\controllers\ActiveController`,如果设置控制器内方法不需要验证请设置 `authOptional` 属性 - 用户私有控制器请全部继承 `merapi\controllers\UserAuthController` ### 开发 完全可以根据Qimall正常的开发流程去开发对应的控制器、视图、插件内的应用 ### 访问路径 > 具体前缀入口看你是默认的系统配置还是独立域名 #### 前台插件访问路径 ``` // 域名/插件名称/控制器/方法 域名/tiny-shop/index/index ``` 对应路径:`addons/TinyShop/frontend/controllers/IndexController` #### 后台插件访问路径 ``` // 域名/backend/插件名称/控制器/方法 域名/backend/tiny-shop/index/index ``` 对应路径:`addons/TinyShop/backend/controllers/IndexController` #### api 插件访问路径 ``` // 域名/api/插件名称/插件模块/控制器/方法 域名/api/tiny-shop/v1/index/index ``` 对应路径:`addons/TinyShop/api/modules/v1/controllers/IndexController` ...