class Plugin

Same name in this branch
  1. 10 core/lib/Drupal/Component/Plugin/Attribute/Plugin.php \Drupal\Component\Plugin\Attribute\Plugin
Same name and namespace in other branches
  1. 9 core/lib/Drupal/Component/Annotation/Plugin.php \Drupal\Component\Annotation\Plugin
  2. 8.9.x core/lib/Drupal/Component/Annotation/Plugin.php \Drupal\Component\Annotation\Plugin
  3. 11.x core/lib/Drupal/Component/Annotation/Plugin.php \Drupal\Component\Annotation\Plugin
  4. 11.x core/lib/Drupal/Component/Plugin/Attribute/Plugin.php \Drupal\Component\Plugin\Attribute\Plugin
  5. 11.x composer/Plugin/RecipeUnpack/Plugin.php \Drupal\Composer\Plugin\RecipeUnpack\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.

Hierarchy

Expanded class hierarchy of Plugin

Related topics

13 files declare their use of Plugin
Action.php in core/lib/Drupal/Core/Annotation/Action.php
Block.php in core/lib/Drupal/Core/Block/Annotation/Block.php
Condition.php in core/lib/Drupal/Core/Condition/Annotation/Condition.php
Constraint.php in core/lib/Drupal/Core/Validation/Annotation/Constraint.php
ContextDefinition.php in core/lib/Drupal/Core/Annotation/ContextDefinition.php

... See full list

4 string references to 'Plugin'
ActionValidationTest::testInvalidPluginId in core/modules/system/tests/src/Kernel/Entity/ActionValidationTest.php
Tests that the action plugin ID is validated.
BlockValidationTest::testInvalidPluginId in core/modules/block/tests/src/Kernel/BlockValidationTest.php
Tests validating a block with an unknown plugin ID.
MappingTest::providerMappingInterpretation in core/tests/Drupal/KernelTests/Config/Schema/MappingTest.php
Provides test cases for all kinds of i) dynamic typing, ii) optional keys.
SearchPageValidationTest::testInvalidPluginId in core/modules/search/tests/src/Kernel/SearchPageValidationTest.php
Tests that the search plugin ID is validated.

File

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

Namespace

Drupal\Component\Annotation
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->parse($values);
    $this->definition = NestedArray::mergeDeepArray([
      $defaults,
      $parsed_values,
    ], TRUE);
  }
  
  /**
   * 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 = [];
    foreach ($values as $key => $value) {
      if ($value instanceof AnnotationInterface) {
        $definitions[$key] = $value->get();
      }
      elseif (is_array($value)) {
        $definitions[$key] = $this->parse($value);
      }
      else {
        $definitions[$key] = $value;
      }
    }
    return $definitions;
  }
  
  /**
   * {@inheritdoc}
   */
  public function get() {
    return $this->definition;
  }
  
  /**
   * {@inheritdoc}
   */
  public function getProvider() {
    return $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;
  }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
Plugin::$definition protected property The plugin definition read from the class annotation. 1
Plugin::get public function Gets the value of an annotation. Overrides AnnotationInterface::get 6
Plugin::getClass public function Gets the class of the annotated class. Overrides AnnotationInterface::getClass 1
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 1
Plugin::parse protected function Parses an annotation into its definition.
Plugin::setClass public function Sets the class of the annotated class. Overrides AnnotationInterface::setClass 1
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. 3

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.