/**
* The object that returns the preconfigured plugin instance appropriate for a particular runtime condition.
*
- * @var \Drupal\Component\Plugin\Mapper\MapperInterface
+ * @var \Drupal\Component\Plugin\Mapper\MapperInterface|null
*/
protected $mapper;
return $this->getFactory()->createInstance($plugin_id, $configuration);
}
catch (PluginNotFoundException $e) {
- $fallback_id = $this->getFallbackPluginId($plugin_id, $configuration);
- return $this->getFactory()->createInstance($fallback_id, $configuration);
+ return $this->handlePluginNotFound($plugin_id, $configuration);
}
}
else {
}
}
+ /**
+ * Allows plugin managers to specify custom behavior if a plugin is not found.
+ *
+ * @param string $plugin_id
+ * The ID of the missing requested plugin.
+ * @param array $configuration
+ * An array of configuration relevant to the plugin instance.
+ *
+ * @return object
+ * A fallback plugin instance.
+ */
+ protected function handlePluginNotFound($plugin_id, array $configuration) {
+ $fallback_id = $this->getFallbackPluginId($plugin_id, $configuration);
+ return $this->getFactory()->createInstance($fallback_id, $configuration);
+ }
+
/**
* {@inheritdoc}
*/
public function getInstance(array $options) {
+ if (!$this->mapper) {
+ throw new \BadMethodCallException(sprintf('%s does not support this method unless %s::$mapper is set.', static::class, static::class));
+ }
return $this->mapper->getInstance($options);
}