创建一个plugin

annotation/plugin.php -> 定义 configuration 键值
Plugin/PN/xxx.php  具体的plugin实现
PNInnterface -> plugin的最初的属性方法定义
PNBase.php -> 定义基本的插件属性和方法
PNManager.php -> 插件的发现和实例化
PNManagerInterface.php  -> 定义和约束的问题
------------------------
core/lib/Drupal/Core/Block

 具体拿openidconnect这个模块来说
/src/Annotation/OpenIDConnectClient.php  定义 configuration 键值
src/Plugin/OpenIDConnectClientInterface.php 定义插件最基本的方法和属性
src/Plugin/OpenIDConnectClientBase.php  插件的基本的方法和属性
src/Plugin/OpenIDConnectClientManager.php 负责插件的实例化和发现和其他操作
src/Plugin/OpenIDConnectClient/Facebook.php 具体的插件实现
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
pluginInterface是起约束作用
pluginBase是主力军,主要是各个Plugin都要去实现的功能,也许是公共功能,这个类所extend的plugin结构不是很复杂,就是关于plugin本身的配置定义等等的操作
pluginManager就是告诉其他系统关于这个plugin的subdir, interface路径,annotation的类的路径,等等。
----
其实都是在后面大量的Plugin系统的代码 基础上的。
---
annotation/xxx.php就是为了定义plugin的definition数组,也许还有configuration数组之类的。
pluginBase这个值是如何被抓取进来的呢, 因为subdir下面的所有的xxx.php,也就是pLugin的具体实现类是会去extend PluginBase这个类的,类是可以不断定义的,只要有联系就行。



原文地址:https://www.cnblogs.com/qinqiu/p/8432159.html