3 namespace Drupal\Component\Plugin;
5 use Drupal\Component\Plugin\Discovery\DiscoveryTrait;
6 use Drupal\Component\Plugin\Exception\PluginNotFoundException;
9 * Base class for plugin managers.
11 abstract class PluginManagerBase implements PluginManagerInterface {
16 * The object that discovers plugins managed by this manager.
18 * @var \Drupal\Component\Plugin\Discovery\DiscoveryInterface
23 * The object that instantiates plugins managed by this manager.
25 * @var \Drupal\Component\Plugin\Factory\FactoryInterface
30 * The object that returns the preconfigured plugin instance appropriate for a particular runtime condition.
32 * @var \Drupal\Component\Plugin\Mapper\MapperInterface
37 * Gets the plugin discovery.
39 * @return \Drupal\Component\Plugin\Discovery\DiscoveryInterface
41 protected function getDiscovery() {
42 return $this->discovery;
46 * Gets the plugin factory.
48 * @return \Drupal\Component\Plugin\Factory\FactoryInterface
50 protected function getFactory() {
51 return $this->factory;
57 public function getDefinition($plugin_id, $exception_on_invalid = TRUE) {
58 return $this->getDiscovery()->getDefinition($plugin_id, $exception_on_invalid);
64 public function getDefinitions() {
65 return $this->getDiscovery()->getDefinitions();
71 public function createInstance($plugin_id, array $configuration = []) {
72 // If this PluginManager has fallback capabilities catch
73 // PluginNotFoundExceptions.
74 if ($this instanceof FallbackPluginManagerInterface) {
76 return $this->getFactory()->createInstance($plugin_id, $configuration);
78 catch (PluginNotFoundException $e) {
79 $fallback_id = $this->getFallbackPluginId($plugin_id, $configuration);
80 return $this->getFactory()->createInstance($fallback_id, $configuration);
84 return $this->getFactory()->createInstance($plugin_id, $configuration);
91 public function getInstance(array $options) {
92 return $this->mapper->getInstance($options);