为了防止NewIDC的插件因不规范的情况而导致无法正常使用,开发时请遵守以下规则:
1. 插件的定义应为类且实现(implements) `NewIDC\Plugin\Plugin` 。
2. 插件必须规定命名空间,定好后一般不得修改,否则会被识别成新插件。
3. 插件info方法中,应返回以下格式的数组:
```
['name'=>'插件名称','slug'=>'插件别名','version'=>'插件版本','description'=>'插件说明']
```
没有name值的情况下,系统自动使用带命名空间的类名作为名称;没有slug值的情况下,系统自动将完整类名(含命名空间)转换为带下划线的小写字符串(如NewIDC\Directadmin\Plugin转为newidc_directadmin_plugin);没有version和description的情况下,系统将不显示版本号和描述。注意,slug不得与其他插件相同,否则会造成冲突!
4. 插件hook方法中,应返回以下格式的数组:
```
[
'demo'=>[$this,'demo'],
'test'=>'test',
]
```
其中,键名为hook名,键值为callable类型,相当于call_user_func的第一个参数。
5. 插件必须主动注册,调用 PluginManager::register($this) 即可。一般情况下,需要创建服务提供者(参看Laravel手册),在服务提供者的boot方法中注册插件。未注册的插件无法调用钩子,也不会出现在插件列表中。
6. 插件允许调用/继承其他类,但是不得改变info/hook方法的意义,否则会导致插件失效或工作不正常。
7. 插件应符合 Laravel 扩展包开发规范,应符合 composer 开发规范。
8. 插件原则上只允许操作 options 表(通过setOption/getOption函数),并且key名不得使用与系统设置或其他插件相冲突的名称,建议命名格式:plugin_name_key,例:plugin_test_ena。
待续...
