应用文件详解
目录
通过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', ], ]);
Index.php 应用插件的控制器之一
通过上面两小节学习,您应该对应用插件有了初步的认识。如果还没搞懂没关系的。接下来的操作,通过实操即可茅塞顿开。
首先,我们知道上一节中,enabled方法注册了如下代码:
(new \Core\Plugin\Plugin())->updateConfig($this, $config)->register("\\Plugin\\Demo\\Ticket\\Index", [ 'toolEvent' => [ 'index' => 'Ticket-Menu-index', ], ]);
方法 | 参数1 | 参数2 |
register | 事件绑定对应的应用插件控制器 | 注册事件绑定类型 |
参数1中,声明了插件将会调用哪一个控制器:"\\Plugin\\Demo\\Ticket\\Index" 。即\Plugin\Demo\Ticket\Index.php这个控制器。
不一定需要index.php,可以是bndex, cndex... 只要在参数1中,填写对应的控制器名称"\\Plugin\\Demo\\Ticket\\Index" ...即可。
\Plugin\Demo\Ticket这个目录不存在的话,你就创建一个就行了。
参数2中,调用了事件绑定中的toolEvent事件。他将会Ticket-Menu-index显示(即后台菜单管理)。而他将会调用控制器Index中的index()方法。
通过上面的详解,在\Plugin\Demo\Ticket目录中,创建Index.php控制器文件并写入如下代码:
<?php namespace Plugin\Demo\Ticket; //注意此处命名空间。 use \Core\Plugin\PluginController; class Index extends PluginController{ public function index(){ echo '我的第一个应用插件!'; } }
测试第一个应用
接下来,我们去到应用商店,选择本地应用。在列表中将看是创建的第一个应用插件显示在列表中。如下图:
接下来,点击启用。并访问Ticket-Menu-index 。默认地址是:/?g=Ticket&m=Menu&a=index 。在工具栏的新增按钮后面,将输出我们预设的一句话,如下图所: