插件是小型的可插拔功能模块。 拥有类似功能的插件属于同一种插件类型。
Drupal包含很多插件和插件类型。例如,'Field widget' (字段小工具)就是一种插件类型,而具体的字段类型就是插件。管理员用户可以从字段类型插件列表中选择并设置字段所使用的类型。
D8的插件系统提供了一套指导原则和可重用的代码组件,使开发者能够公开他们的可插拔组件,如需要,还能够通过用户界面管理这些组件。
插件是由模块定义的:一个模块可以提供不同类型的插件,不同的模块可以提供各自特定类型的插件。
概述
插件系统由三种基本元素构成:
-
插件类型
插件类型是一个控制中心类,它决定了插件如何被系统发现和实例化。这个类型会描述其下所属插件的核心目标,例如后端缓存,图片操作,区块等等。
-
插件发现模式
插件发现是指在可用代码库中查找具有特定类型的、合适的插件实例的过程。(Plugin Discovery is the process of finding plugins within the available code base that qualify for use within this particular plugin type's use case.)
-
插件工厂
插件工厂负责使用给定的用例来实例化具体插件。
此外,插件系统还包含一些特定场景下比较有用的组件:
-
插件衍生
插件衍生允许使用一个通用插件代替多个插件。这在用户输入的数据可能影响可用插件的情况下非常有用。例如,假设菜单是用一个插件来展示的,当管理员创建了新的菜单,那么新菜单也能够被该插件展示,而不需要去创建一个额外的插件来展示它。考虑到帮助文档,尤其是用例的帮助文档,既能被输出,也能被应用到别的地方(原文:allowing for help text specific to the use case to be rendered and utilized.),因此插件衍生也支持在用户界面中用多个插件来代替一个插件。插件衍生工具的主要目的是将部分已配置的插件作为优先级插件使用,以免与其他用户界面的插件产生混淆,从而减少管理者使用这些插件的负担。
-
修饰器发现模式
修饰器发现是另外一种发现模式,为了包装已存在的发现方法。核心目前提供cacheDecorator来缓存被选择了插件类型的(插件的)发现过程。如果需要的话,这种模式也可以扩展到其他情况下。(原文:A discovery decorator is another available discovery method meant to wrap an existing discovery method. Core currently supplies the cacheDecorator which will cache the discovery process that is chosen for a plugin type. This pattern could be expanded to other use cases if necessary.) -
插件映射
插件映射允许映射一些东西(通常是一个字符串)到一个特定的插件实例。插件类型能够使用这种方法返回一个基于自定义名称的完全配置和初始化的插件,而不需要手动使用API去初始化和配置插件的实例。
本文将就这些概念给出深入的讨论,最佳实践和代码示例。