你在这里

D8 插件发现模式

原文链接: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();
}
?>

有四种不同的核心发现类型。

  1. StaticDiscovery
    StaticDiscovery允许发现类自身直接注册插件。一个protected变量$definitions保存所有的通过public方法setDefinition()注册的插件定义。所有通过这种方式定义的插件都能够在plugin manager documentation中被列出。
  2. HookDiscovery
    HookDiscovery类允许插件发现使用Drupal的hook_component_info()/hook_component_info_alert()模式。有了这个发现器,插件管理器可以调用信息钩子来获取可用插件列表。
  3. AnnotatedClassDiscovery
    AnnotatedClassDiscovery类使用包含插件定义的注解名称,比如,@Plugin@EntityType,在插件的文档部分发现插件,最小化插件发现阶段的内存使用率。AnnotatedClassDiscovery类的构造函数带有参数,$subdir,指明这个插件类型的sub-directory/sub-namespace。AnnotatedClassDiscovery类会扫描插件目录里面这些sub-directory目录里面的符合PSR-0规范的类来查找插件。
  4. YamlDiscovery
    YamlDiscovery允许插件在YAML文件中被定义。 Drupal核心使用该文件进行本地任务和本地操作。