1. 8.5.x core/lib/Drupal/Component/Annotation/Plugin.php Plugin
  2. 8.5.x vendor/composer/installers/src/Composer/Installers/Plugin.php Plugin
  3. 8.0.x core/lib/Drupal/Component/Annotation/Plugin.php Plugin
  4. 8.1.x core/lib/Drupal/Component/Annotation/Plugin.php Plugin
  5. 8.2.x core/lib/Drupal/Component/Annotation/Plugin.php Plugin
  6. 8.3.x core/lib/Drupal/Component/Annotation/Plugin.php Plugin
  7. 8.3.x vendor/composer/installers/src/Composer/Installers/Plugin.php Plugin
  8. 8.4.x core/lib/Drupal/Component/Annotation/Plugin.php Plugin
  9. 8.4.x vendor/composer/installers/src/Composer/Installers/Plugin.php Plugin
  10. 8.6.x vendor/composer/installers/src/Composer/Installers/Plugin.php Plugin
  11. 8.6.x core/lib/Drupal/Component/Annotation/Plugin.php Plugin

Defines a Plugin annotation object.

Annotations in plugin classes can use this class in order to pass various metadata about the plugin through the parser to DiscoveryInterface::getDefinitions() calls. This allows the metadata of a class to be located with the class itself, rather than in module-based info hooks.


Expanded class hierarchy of Plugin

Related topics

35 files declare their use of Plugin
Action.php in core/lib/Drupal/Core/Annotation/Action.php
AggregatorFetcher.php in core/modules/aggregator/src/Annotation/AggregatorFetcher.php
AggregatorParser.php in core/modules/aggregator/src/Annotation/AggregatorParser.php
AggregatorProcessor.php in core/modules/aggregator/src/Annotation/AggregatorProcessor.php
Archiver.php in core/lib/Drupal/Core/Archiver/Annotation/Archiver.php

... See full list

5 string references to 'Plugin'
block.schema.yml in core/modules/block/config/schema/block.schema.yml
ContextualLinkManagerTest::testPluginDefinitionAlter in core/tests/Drupal/Tests/Core/Menu/ContextualLinkManagerTest.php
Tests the plugins alter hook.
search.schema.yml in core/modules/search/config/schema/search.schema.yml
system.schema.yml in core/modules/system/config/schema/system.schema.yml
tour.schema.yml in core/modules/tour/config/schema/tour.schema.yml
8 classes are annotated with Plugin
Apple in core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/Apple.php
Plugin annotation @Plugin( id = "apple", label = "Apple", color = "green" )
Banana in core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/Banana.php
Plugin annotation @Plugin( id = "banana", label = "Banana", color = "yellow", uses = { "bread" = @Translation("Banana bread"), "loaf" = @PluralTranslation( singular = "@count loaf", plural = "@count loaves" ) } )
Cherry in core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/Cherry.php
Plugin annotation @Plugin( id = "cherry", label = "Cherry", color = "red" )
CustomDirectoryExample1 in core/modules/system/tests/modules/plugin_test/src/CustomDirectoryExample1.php
Provides a test plugin within a custom directory.
CustomDirectoryExample2 in core/modules/system/tests/modules/plugin_test/src/CustomDirectoryExample2.php
Provides a test plugin within a custom directory.

... See full list


core/lib/Drupal/Component/Annotation/Plugin.php, line 20


View source
class Plugin implements AnnotationInterface {

   * The plugin definition read from the class annotation.
   * @var array
  protected $definition;

   * Constructs a Plugin object.
   * Builds up the plugin definition and invokes the get() method for any
   * classed annotations that were used.
  public function __construct($values) {
    $reflection = new \ReflectionClass($this);

    // Only keep actual default values by ignoring NULL values.
    $defaults = array_filter($reflection
      ->getDefaultProperties(), function ($value) {
      return $value !== NULL;
    $parsed_values = $this
    $this->definition = NestedArray::mergeDeep($defaults, $parsed_values);

   * Parses an annotation into its definition.
   * @param array $values
   *   The annotation array.
   * @return array
   *   The parsed annotation as a definition.
  protected function parse(array $values) {
    $definitions = array();
    foreach ($values as $key => $value) {
      if ($value instanceof AnnotationInterface) {
        $definitions[$key] = $value
      elseif (is_array($value)) {
        $definitions[$key] = $this
      else {
        $definitions[$key] = $value;
    return $definitions;

   * {@inheritdoc}
  public function get() {
    return $this->definition;

   * {@inheritdoc}
  public function getProvider() {
    return isset($this->definition['provider']) ? $this->definition['provider'] : FALSE;

   * {@inheritdoc}
  public function setProvider($provider) {
    $this->definition['provider'] = $provider;

   * {@inheritdoc}
  public function getId() {
    return $this->definition['id'];

   * {@inheritdoc}
  public function getClass() {
    return $this->definition['class'];

   * {@inheritdoc}
  public function setClass($class) {
    $this->definition['class'] = $class;



Contains filters are case sensitive
Namesort descending Modifiers Type Description Overrides
Plugin::$definition protected property The plugin definition read from the class annotation.
Plugin::get public function Gets the value of an annotation. Overrides AnnotationInterface::get
Plugin::getClass public function Gets the class of the annotated class. Overrides AnnotationInterface::getClass
Plugin::getId public function Gets the unique ID for this annotated class. Overrides AnnotationInterface::getId
Plugin::getProvider public function Gets the name of the provider of the annotated class. Overrides AnnotationInterface::getProvider
Plugin::parse protected function Parses an annotation into its definition.
Plugin::setClass public function Sets the class of the annotated class. Overrides AnnotationInterface::setClass
Plugin::setProvider public function Sets the name of the provider of the annotated class. Overrides AnnotationInterface::setProvider
Plugin::__construct public function Constructs a Plugin object.