应用文件详解

目录

通过PESCMS提供的快捷工具创建第一个应用后。定位\Plugin\demo目录,可以明确看到plugin.ini 和 Init.php 两个必备核心文件。下面开始详解应用插件的各个文件。

image.png

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必须实现的方法:

方法名称功能说明
optionplugin.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 。在工具栏的新增按钮后面,将输出我们预设的一句话,如下图所:

image.png

PESCMS DOC 文档系统
© Copyright 2015-2020. by the PESCMS DOC
耗时0.0192秒