annotate core/lib/Drupal/Component/Plugin/Discovery/DiscoveryTrait.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Component\Plugin\Discovery;
Chris@0 4
Chris@0 5 use Drupal\Component\Plugin\Exception\PluginNotFoundException;
Chris@0 6
Chris@0 7 /**
Chris@0 8 * @see Drupal\Component\Plugin\Discovery\DiscoveryInterface
Chris@0 9 */
Chris@0 10 trait DiscoveryTrait {
Chris@0 11
Chris@0 12 /**
Chris@0 13 * {@inheritdoc}
Chris@0 14 */
Chris@0 15 abstract public function getDefinitions();
Chris@0 16
Chris@0 17 /**
Chris@0 18 * {@inheritdoc}
Chris@0 19 */
Chris@0 20 public function getDefinition($plugin_id, $exception_on_invalid = TRUE) {
Chris@0 21 $definitions = $this->getDefinitions();
Chris@0 22 return $this->doGetDefinition($definitions, $plugin_id, $exception_on_invalid);
Chris@0 23 }
Chris@0 24
Chris@0 25 /**
Chris@0 26 * Gets a specific plugin definition.
Chris@0 27 *
Chris@0 28 * @param array $definitions
Chris@0 29 * An array of the available plugin definitions.
Chris@0 30 * @param string $plugin_id
Chris@0 31 * A plugin id.
Chris@0 32 * @param bool $exception_on_invalid
Chris@0 33 * If TRUE, an invalid plugin ID will cause an exception to be thrown; if
Chris@0 34 * FALSE, NULL will be returned.
Chris@0 35 *
Chris@0 36 * @return array|null
Chris@0 37 * A plugin definition, or NULL if the plugin ID is invalid and
Chris@0 38 * $exception_on_invalid is TRUE.
Chris@0 39 *
Chris@0 40 * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
Chris@0 41 * Thrown if $plugin_id is invalid and $exception_on_invalid is TRUE.
Chris@0 42 */
Chris@0 43 protected function doGetDefinition(array $definitions, $plugin_id, $exception_on_invalid) {
Chris@0 44 // Avoid using a ternary that would create a copy of the array.
Chris@0 45 if (isset($definitions[$plugin_id])) {
Chris@0 46 return $definitions[$plugin_id];
Chris@0 47 }
Chris@0 48 elseif (!$exception_on_invalid) {
Chris@0 49 return NULL;
Chris@0 50 }
Chris@0 51
Chris@18 52 $valid_ids = implode(', ', array_keys($definitions));
Chris@18 53 throw new PluginNotFoundException($plugin_id, sprintf('The "%s" plugin does not exist. Valid plugin IDs for %s are: %s', $plugin_id, static::class, $valid_ids));
Chris@0 54 }
Chris@0 55
Chris@0 56 /**
Chris@0 57 * {@inheritdoc}
Chris@0 58 */
Chris@0 59 public function hasDefinition($plugin_id) {
Chris@0 60 return (bool) $this->getDefinition($plugin_id, FALSE);
Chris@0 61 }
Chris@0 62
Chris@0 63 }