应用文件详解
通过PESCMS提供的快捷工具创建第一个应用后。定位\Plugin\demo目录,可以明确看到plugin.ini 和 Init.php 两个必备核心文件。下面开始详解应用插件的各个文件。
plugin.ini 文件详解
在应用运行层中,我们用编辑器打开plugin.ini文件。
[plugin]
version = 0.0.1
name = 我的第一个应用插件
enname= demo
content = 这是我编写的第一个应用插件
author = PESCMS
website = https://www.pescms.com
;应用插件在什么组别下可运行。同时,控制器也需要依据填写的组别进行创建。
GROUP = Ticket
;应用插件是否有配置信息可填写。0:表示没有 1:表示有配置信息可填写
option = 0
;应用插件的启用状态。默认为 disabled禁用
status = disabled
plugin.ini 文件主要定义应用插件的基本信息。
注意:enname必须与插件目录一致。
其次GROUP声明的运行组,决定运行的控制器也需要在应用运行层中对应的组目录。如现在声明了Ticket组。那么您创建的控制器必定是 Plugin\Demo\Ticket....
Init.php 文件详解
在应用运行层中,我们用编辑器打开Init.php文件,并写入如下代码
<?php
namespace Plugin\demo;
use \Core\Plugin\PluginController,
\Core\Plugin\PluginImplements;
class Init extends PluginController implements PluginImplements {
/**
* 插件选项
* @return mixed|void
*/
public function option() {
//plugin.ini 中 option = 1,那么在此处调用您需要用户填写的配置信息。
}
/**
* 启用插件
* @return mixed|void
*/
public function enabled() {
$config = $this->loadConfig($this);
$config['plugin']['status'] = 'enabled';
//更新plugin.ini中的启用状态,同时注册对应的事件绑定。
(new \Core\Plugin\Plugin())->updateConfig($this, $config)->register("\\Plugin\\Demo\\Ticket\\Index", [
'toolEvent' => [
'index' => 'Ticket-Menu-index',
],
]);
$this->success('插件启用成功');
}
/**
* 禁用插件
* @return mixed|void
*/
public function disabled() {
$config = $this->loadConfig($this);
$config['plugin']['status'] = 'disabled';
//更新plugin.ini中的启用状态,同时注销对应的事件绑定。
(new \Core\Plugin\Plugin())->updateConfig($this, $config)->unRegister('\\Plugin\\Demo\\Ticket\\Index');
$this->success('插件禁用成功');
}
/**
* 删除插件
* @return mixed|void
*/
public function remove(){
$plugin = new \Core\Plugin\Plugin();
//移除插件同时注销对应的事件绑定。
$removeFile = $plugin->unRegister('\\Plugin\\Demo\\Ticket\\Index')->remove($this);
if($removeFile !== true){
$this->error("移除插件时出错! {$removeFile['msg']}");
}
$plugin->unRegister($this);
$this->success('插件已被删除');
}
/**
* 安装应用插件执行的方法
* @return mixed|void
*/
public function install() {
//填写插件安装时必要的运行信息。
}
/**
* 升级插件
* @return mixed|void
*/
public function upgrade(){
}
}
首先,我们创建了一个Init类,依次继承PluginController类 和 实现PluginImplements接口
PluginImplements接口
其中PluginImplements接口,定义了6个Init必须实现的方法:
方法名称 | 功能说明 |
---|---|
option | plugin.ini中, option =1 则在此处填写您的配置信息 |
enabled | 应用插件启用时,注册相应的事件绑定等动作。 |
disabled | 应用插件禁用时,注销相应的事件绑定等动作。 |
remove | 应用插件被删除,同时注销相应的事件绑定等动作。 |
install | 应用插件首次安装时触发的安装部署行为。 |
upgrade | 应用插件升级时触发的对应修改行为。 |
因此Init.php文件中,必定需要编写上述方法,如上代码所示。
enabled和disabled
接下来,我们了解一下enabled和disabled两个方法中关于 事件绑定和事件注销。
public function enabled() {
$config = $this->loadConfig($this);
$config['plugin']['status'] = 'enabled';
(new \Core\Plugin\Plugin())->updateConfig($this, $config)->register("\\Plugin\\Demo\\Ticket\\Index", [
'toolEvent' => [
'index' => 'Ticket-Menu-index',
],
]);
$this->success('插件启用成功');
}
$this->loadConfig($this);
作用是读取当前应用插件的 plugin.ini的信息
接下来直接一个链式操作,去更新配置信息 updateConfig($this, $config)
最后进行相应的事件绑定 register('事件绑定对应的应用插件控制器', '注册事件绑定类型');
相对地,disabled方法的unRegister('事件绑定对应的应用插件控制器')
则是进行解除绑定了。
范围绑定事件
什么是范围绑定事件?例如,我想应用插件在前台所有页面都可以调用,这时候就需要范围绑定事件了。PESCMS系列软件都提供了三个占位符(:g、:m、:a) 给您进行范围绑定事件。我们以注册事件绑定代码为例说明:
//在所有运行组别,只要存在控制器Menu,且方法为index,则执行toolEvent事件绑定。
register("\\Plugin\\Demo\\Ticket\\Index", [
'toolEvent' => [
'index' => ':g-Menu-index',
],
]);
//在Ticket组,任意控制器,方法为index,则执行toolEvent事件绑定。
register("\\Plugin\\Demo\\Ticket\\Index", [
'toolEvent' => [
'index' => 'Ticket-:m-index',
],
]);
//在Ticket组,控制器为Menu,任意方法,则执行toolEvent事件绑定。
register("\\Plugin\\Demo\\Ticket\\Index", [
'toolEvent' => [
'index' => 'Ticket-Menu-:a',
],
]);