From 29f5876c6f9e7ff79819d4d56c3899301c1abddd Mon Sep 17 00:00:00 2001 From: Akkariin Meiko <34357771+kasuganosoras@users.noreply.github.com> Date: Sun, 16 Sep 2018 03:00:00 +0800 Subject: [PATCH] =?UTF-8?q?Created=20=E5=BC=80=E5=8F=91=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E6=95=99=E7=A8=8B=20(markdown)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 开发插件教程.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 开发插件教程.md diff --git a/开发插件教程.md b/开发插件教程.md new file mode 100644 index 0000000..6d1032e --- /dev/null +++ b/开发插件教程.md @@ -0,0 +1,59 @@ +PHPMC 7 提供了插件接口,您可以在不修改程序的情况下增加自定义功能。 + +首先,我们来了解插件的基础结构,PHPMC 7 的所有插件均放在 `plugins/` 目录下。 + +### 插件存放结构 + +Web
+    |— plugins
+               |— com.example.test.php
+               |— com.example.text.json
+ +`com.example.test.php` 插件的主体 + +`com.example.test.json` 插件的信息 + +### 快速开发一个简单的插件 + +_注意:此插件仅用于测试,目的是为了让您更容易了解插件运行机制,可能会导致网站其他功能异常。_ + +本教程定义的插件名为 Tester。 + +在 plugins 下新建一个文件 com.myplugin.tester.json,编辑并输入以下内容 +```json +{ + "main":"Tester", + "package":"com.myplugin.tester", + "author":"Akkariin", + "website":"https://www.akkariin.com/" +} +``` +其中的 main 是插件的类名,package 是包名(用于防止插件重复),author 是作者名,website 是插件相关网站 + +然后我们开始编写插件,在 plugins 下新建另一个文件 com.myplugin.tester.php,编辑并输入以下内容 +```php +Event->registerClass("defaultActionEvent", new Tester()); // 注册 defaultActionEvent 事件 + } + public function defaultActionEvent($test) { + echo "你请求了以下参数:" . json_encode($test); // 输出 GET 参数数组 + return false; // 不取消事件 + } +} +``` +简单介绍这个插件的作用:当你请求一个不存在的 action(例如 `/?action=2333`)时,将会执行此插件的 `defaultActionEvent()` 方法。 + +onload() 是一个静态方法,会在插件被加载时自动调用一次 + +`$Loader->Event->registerClass` 负责注册插件事件,参数如下 +1. `defaultActionEvent` 就是未定义 Action 时执行的事件,类型为 String +2. 插件的主类,也就是 Tester,类型为 class + +插件中的 `defaultActionEvent()` 会优先于系统内置的 `defaultActionEvent()` 事件执行,插件在执行完毕后必须返回一个 Boolean 值。 + +如果返回了 true,那么此事件就会终止,不会继续传递给系统执行,如果返回了 false,那么事件会继续交给系统执行。 + +其他 API 还在更新,敬请期待。 \ No newline at end of file