function DerivativeDiscoveryDecorator::getDefinition

Same name in other branches
  1. 9 core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php \Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator::getDefinition()
  2. 8.9.x core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php \Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator::getDefinition()
  3. 11.x core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php \Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator::getDefinition()

Throws

\Drupal\Component\Plugin\Exception\InvalidDeriverException Thrown if the 'deriver' class specified in the plugin definition does not implement \Drupal\Component\Plugin\Derivative\DeriverInterface.

Overrides DiscoveryTrait::getDefinition

File

core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php, line 51

Class

DerivativeDiscoveryDecorator
Base class providing the tools for a plugin discovery to be derivative aware.

Namespace

Drupal\Component\Plugin\Discovery

Code

public function getDefinition($plugin_id, $exception_on_invalid = TRUE) {
    // This check is only for derivative plugins that have explicitly provided
    // an ID. This is not common, and can be expected to fail. Therefore, opt
    // out of the thrown exception, which will be handled when checking the
    // $base_plugin_id.
    $plugin_definition = $this->decorated
        ->getDefinition($plugin_id, FALSE);
    [
        $base_plugin_id,
        $derivative_id,
    ] = $this->decodePluginId($plugin_id);
    $base_plugin_definition = $this->decorated
        ->getDefinition($base_plugin_id, $exception_on_invalid);
    if ($base_plugin_definition) {
        $deriver = $this->getDeriver($base_plugin_id, $base_plugin_definition);
        if ($deriver) {
            $derivative_plugin_definition = $deriver->getDerivativeDefinition($derivative_id, $base_plugin_definition);
            // If a plugin defined itself as a derivative, merge in possible
            // defaults from the derivative.
            if ($derivative_id && isset($plugin_definition)) {
                $plugin_definition = $this->mergeDerivativeDefinition($plugin_definition, $derivative_plugin_definition);
            }
            else {
                $plugin_definition = $derivative_plugin_definition;
            }
        }
    }
    return $plugin_definition;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.