原文链接:D8 Plugin Discovery
插件发现是Drupal根据给定类型查找插件的过程。每种插件类型都必须设置一个发现方法(说明在plugin manager 文档中)。
插件的发现组件实现DiscoveryInterface
接口,定义了每个发现类必须有的方法。
<?php
/**
* @file
* Contains \Drupal\Component\Plugin\Discovery\DiscoveryInterface.
*/
namespace Drupal\Component\Plugin\Discovery;
/**
* Defines the plugin discovery interface.
*/
interface DiscoveryInterface {
/**
* Gets a specific plugin definition.
*
* @param string $plugin_id
* A plugin id.
*
* @return array
* A plugin definition.
*/
public function getPluginDefinition($plugin_id);
/**
* Gets the definition of all plugins for this type.
*
* @return array
* An array of configuration definitions.
*/
public function getPluginDefinitions();
}
?>
有四种不同的核心发现类型。
- StaticDiscovery
StaticDiscovery允许发现类自身直接注册插件。一个protected变量
$definitions
保存所有的通过public方法setDefinition()
注册的插件定义。所有通过这种方式定义的插件都能够在plugin manager documentation中被列出。 - HookDiscovery
HookDiscovery类允许插件发现使用Drupal的
hook_component_info()/hook_component_info_alert()
模式。有了这个发现器,插件管理器可以调用信息钩子来获取可用插件列表。 - AnnotatedClassDiscovery
AnnotatedClassDiscovery类使用包含插件定义的注解名称,比如,
@Plugin
,@EntityType
,在插件的文档部分发现插件,最小化插件发现阶段的内存使用率。AnnotatedClassDiscovery类的构造函数带有参数,$subdir
,指明这个插件类型的sub-directory/sub-namespace。AnnotatedClassDiscovery类会扫描插件目录里面这些sub-directory目录里面的符合PSR-0规范的类来查找插件。 - YamlDiscovery YamlDiscovery允许插件在YAML文件中被定义。 Drupal核心使用该文件进行本地任务和本地操作。