跳转到主要内容
zheojian 提交于 22 October 2014

原文链接: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核心使用该文件进行本地任务和本地操作。