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 }
|