plus-8.x-4.x-dev/src/Annotation/Template.php
src/Annotation/Template.php
<?php namespace Drupal\plus\Annotation; use Doctrine\Common\Annotations\AnnotationException; use Drupal\Component\Annotation\AnnotationInterface; use Drupal\Component\Annotation\Plugin; /** * Defines a Template annotation object. * * Plugin Namespace: "Plugin/Theme/Template". * * @see \Drupal\plus\Plugin\Theme\Template\TemplateInterface * @see \Drupal\plus\Plugin\Theme\Template\ProviderPluginManager * @see plugin_api * * @Annotation * * @ingroup plugins_template */ class Template extends Plugin { /** * A list of acceptable placements. * * @var array * * @see \Drupal\plus\Annotation\Template::$placement */ public static $PLACEMENTS = [ 'append', 'prepend', 'replace_append', 'replace_prepend', ]; /** * The plugin ID. * * When an annotation is given no key, 'value' is assumed by Doctrine. * * @var string */ public $value; /** * Flag that determines how to add the plugin to a callback array. * * @var string * * @see \Drupal\plus\Annotation\Template::$PLACEMENTS * @see \Drupal\plus\Plugin\Theme\ThemeBase::addCallback() */ public $placement = 'append'; /** * A callback to replace. * * @var string */ public $replace = FALSE; /** * The default variables for this template. * * @var array */ public $variables = []; /** * Used for render element items only. * * The name of the renderable element or element tree to pass to the template. * This name is used as the name of the variable that holds the renderable * element or tree in the preprocess stage. * * @var string */ public $renderElement = ''; /** * {@inheritdoc} */ public function get() { $definition = parent::get(); $parent_properties = array_keys($definition); $parent_properties[] = 'value'; // Merge in the defined properties. $reflection = new \ReflectionClass($this); foreach ($reflection->getProperties(\ReflectionProperty::IS_PUBLIC) as $property) { $name = $property->getName(); if (in_array($name, $parent_properties)) { continue; } $value = $property->getValue($this); if ($value instanceof AnnotationInterface) { $value = $value->get(); } if ($name === 'placement' && !in_array($value, static::$PLACEMENTS)) { throw new AnnotationException("Invalid placement type: $value"); } $definition[$name] = $value; } return $definition; } }