外观
新插件开发方式
- 通过神码开发工具,生成插件结构包
- 在application/model/Newplugin.php注册插件
php
$register_hook_plugin_list添加插件名称原则
- 尽可能与插件相关的代码都在插件包(除一些特别需求,暂时无法做到外)
- 数据表都要在插件包的install.php,upgrade.php
- 前端该插件的所有页面必须要包在一个以插件名称命名的目录下。
工作原理
- 首先不同的插件有自己的命名空间
- 通过thinkhp5的hook的方式来解耦代码
- hook将逐步添加。
- hook所传的参数将会逐层传递。
在新插件里使用new admin的model()的with函数需注意
php
//第一个参数,不带.表示model的命名空间为app\model,带.表示前缀表示插件名称,命名空间为app\plugins\{plugin_name}\model
$table->model()->with("yimei.yimeiplus","level");在新插件里使用new admin的select联动函数需注意
php
//yimei为插件名称,Api_yimei为apiYimei的controller
$form->select('level_select', 'level_select')
->options([1=>"等级1",2=>"等级2",3=>"等级3"])->load("pics","yimei.Api_yimei|getPics");判断插件是否开启
php
//yimei为插件名称
Newplugin::isOpen("yimei");Hook使用
php
//在插件目录下CustomHook.php
public static function registerHook()
{
Hook::add(Newplugin::H_orderStatusChange, self::class);
...
}
//不接收传送参数(不修改)
public function orderStatusChange($params)
{
print_r("接收参数\n");
print_r($params);
}
//修改传送的参数
public function orderStatusChange(&$params)
{
print_r("接收参数\n");
print_r($params);
}Hook注解
php
//application/model/Newplugin.php
public const H_orderStatusChange= "orderStatusChange"; //订单支付成功或订单完成时
public const H_openCustomPusherInfo= "openCustomPusherInfo"; //是否开启权益页-自定义等级展示
public const H_getCustomPusherInfo= "getCustomPusherInfo"; //获取权益页-自定义等级展示
public const H_getGoodsUnitPrice= "getGoodsUnitPrice"; //获取商品单价
public const H_wxappUrlconfig= "wxappUrlconfig"; //DIY链接(wxapp_url_config.php)
public const H_homeUrlconfig= "homeUrlconfig"; //DIY链接(admin/controller/Chome.php)
public const H_userAfterInsert= "userAfterInsert"; //用户创建之后
public const H_setParents= "setParents"; //设置上下级关系时
public const H_hasGoodsAreaType= "hasGoodsAreaType"; //是否开启商品区功能
public const H_goodsAreaList= "goodsAreaList"; //商品区列表新添加Hook的方法
php
//1.在application/model/Newplugin.php下命令一个常量值(规则如下)
public const H_orderStatusChange= "orderStatusChange"; //订单支付成功或订单完成时
//2. 在触发的位置添加代码
$order = [
"order_id" => $order_id,
"type" => $type,
"user_id" => $user_id,
"flag" =>$flag,
];
Hook::listen(Newplugin::H_orderStatusChange, $order);前端API-调用新插件的方式
javascript
//ningming为插件名称
app.api.postWithPlugin('api_ningming|getGridTeamList', "ningming", param).then(res => {
this.setData({
data_list: res.data,
})
}).catch(res => {
app.tips(res)
})注意事项
- 可参考(yimei,ningming)两个项目的代码方式