用thinkphp做插件开发之前,可以先参考下onethink的插件模块;
本人用的版本是 tp3.2.3版本(注意 ot 用因为版本问题略有不同),可以通过如下截图了解它的行为扩展和钩子来实现 (多入口) 插件开发:
修改hook系统类(如下图1-1 和 1-2),图1-1 判断导入的插件标签类是否存在 ‘ / ’ (根据导入插件时判断).
如图1-2中设置的(tags.php)是自动导入的,设置‘app_init ’意思指在应用初始化时就 导入 该标签类.
该类是 Common\Behavior\InitHookBehavior 存在 ‘ / ’ ,所以会走 单入口(限制只有一个run方法).
图1-3 是在 某个应用控制器 里 手动 导入插件,举个下面的例子:
add('demo', 'Editor') ,参数 ’demo‘ 为标签名,在Editor插件类 (图1-5) 里面作方法名,并且用于后面监听调用插件 (必须遵循先导入再监听原则),比如我在视图用自定义函数hook (图1-4);参数 ’Editor‘ 为插件名 ,看 图1-1和1-3 的红色圈 就很容易理解它的命名来源, 因为参数 ‘Editor’ 不像 aa\bb\cc 这样的形式,不存在 ' \ ',所以会走多入口模式,如此类推. 最后输出 图1-6。我们可以做一些优化,可以参考ot ,插件导入在应用初始化的时候就完成了 (InitHookBehavior类设置的意义),如图1-7,最后 同样 输出 图 1- 6。
( 图 1-1)
(图1-2)
(图 1-3)
(图1-4)
(图1-5)
(图1-6)
(图1-7)