You are here

class ContextDefinition in Zircon Profile 8.0

Same name in this branch
  1. 8.0 core/lib/Drupal/Core/Annotation/ContextDefinition.php \Drupal\Core\Annotation\ContextDefinition
  2. 8.0 core/lib/Drupal/Core/Plugin/Context/ContextDefinition.php \Drupal\Core\Plugin\Context\ContextDefinition
Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Annotation/ContextDefinition.php \Drupal\Core\Annotation\ContextDefinition

Defines a context definition annotation object.

Some plugins require various data contexts in order to function. This class supports that need by allowing the contexts to be easily defined within an annotation and return a ContextDefinitionInterface implementing class.

Hierarchy

Expanded class hierarchy of ContextDefinition

Related topics

File

core/lib/Drupal/Core/Annotation/ContextDefinition.php, line 79
Contains \Drupal\Core\Annotation\ContextDefinition.

Namespace

Drupal\Core\Annotation
View source
class ContextDefinition extends Plugin {

  /**
   * The ContextDefinitionInterface object.
   *
   * @var \Drupal\Core\Plugin\Context\ContextDefinitionInterface
   */
  protected $definition;

  /**
   * Constructs a new context definition object.
   *
   * @param array $values
   *   An associative array with the following keys:
   *   - value: The required data type.
   *   - label: (optional) The UI label of this context definition.
   *   - required: (optional) Whether the context definition is required.
   *   - multiple: (optional) Whether the context definition is multivalue.
   *   - description: (optional) The UI description of this context definition.
   *   - default_value: (optional) The default value in case the underlying
   *     value is not set.
   *   - class: (optional) A custom ContextDefinitionInterface class.
   *
   * @throws \Exception
   *   Thrown when the class key is specified with a non
   *   ContextDefinitionInterface implementing class.
   */
  public function __construct(array $values) {
    $values += array(
      'required' => TRUE,
      'multiple' => FALSE,
      'default_value' => NULL,
    );

    // Annotation classes extract data from passed annotation classes directly
    // used in the classes they pass to.
    foreach ([
      'label',
      'description',
    ] as $key) {

      // @todo Remove this workaround in https://www.drupal.org/node/2362727.
      if (isset($values[$key]) && $values[$key] instanceof TranslatableMarkup) {
        $values[$key] = (string) $values[$key]
          ->get();
      }
      else {
        $values[$key] = NULL;
      }
    }
    if (isset($values['class']) && !in_array('Drupal\\Core\\Plugin\\Context\\ContextDefinitionInterface', class_implements($values['class']))) {
      throw new \Exception('ContextDefinition class must implement \\Drupal\\Core\\Plugin\\Context\\ContextDefinitionInterface.');
    }
    $class = isset($values['class']) ? $values['class'] : 'Drupal\\Core\\Plugin\\Context\\ContextDefinition';
    $this->definition = new $class($values['value'], $values['label'], $values['required'], $values['multiple'], $values['description'], $values['default_value']);
  }

  /**
   * Returns the value of an annotation.
   *
   * @return \Drupal\Core\Plugin\Context\ContextDefinitionInterface
   */
  public function get() {
    return $this->definition;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ContextDefinition::$definition protected property The ContextDefinitionInterface object. Overrides Plugin::$definition
ContextDefinition::get public function Returns the value of an annotation. Overrides Plugin::get
ContextDefinition::__construct public function Constructs a new context definition object. Overrides Plugin::__construct
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