DiscoveryTrait.php

Same filename and directory in other branches
  1. 9 core/lib/Drupal/Component/Plugin/Discovery/DiscoveryTrait.php
  2. 8.9.x core/lib/Drupal/Component/Plugin/Discovery/DiscoveryTrait.php
  3. 10 core/lib/Drupal/Component/Plugin/Discovery/DiscoveryTrait.php

Namespace

Drupal\Component\Plugin\Discovery

File

core/lib/Drupal/Component/Plugin/Discovery/DiscoveryTrait.php

View source
<?php

namespace Drupal\Component\Plugin\Discovery;

use Drupal\Component\Plugin\Exception\PluginNotFoundException;

/**
 * @see Drupal\Component\Plugin\Discovery\DiscoveryInterface
 */
trait DiscoveryTrait {
    
    /**
     * {@inheritdoc}
     */
    public abstract function getDefinitions();
    
    /**
     * {@inheritdoc}
     */
    public function getDefinition($plugin_id, $exception_on_invalid = TRUE) {
        $definitions = $this->getDefinitions();
        return $this->doGetDefinition($definitions, $plugin_id, $exception_on_invalid);
    }
    
    /**
     * Gets a specific plugin definition.
     *
     * @param array $definitions
     *   An array of the available plugin definitions.
     * @param string $plugin_id
     *   A plugin id.
     * @param bool $exception_on_invalid
     *   If TRUE, an invalid plugin ID will cause an exception to be thrown; if
     *   FALSE, NULL will be returned.
     *
     * @return array|null
     *   A plugin definition, or NULL if the plugin ID is invalid and
     *   $exception_on_invalid is TRUE.
     *
     * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
     *   Thrown if $plugin_id is invalid and $exception_on_invalid is TRUE.
     */
    protected function doGetDefinition(array $definitions, $plugin_id, $exception_on_invalid) {
        // Avoid using a ternary that would create a copy of the array.
        if (isset($definitions[$plugin_id])) {
            return $definitions[$plugin_id];
        }
        elseif (!$exception_on_invalid) {
            return NULL;
        }
        $valid_ids = implode(', ', array_keys($definitions));
        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));
    }
    
    /**
     * {@inheritdoc}
     */
    public function hasDefinition($plugin_id) {
        return (bool) $this->getDefinition($plugin_id, FALSE);
    }

}

Traits

Title Deprecated Summary
DiscoveryTrait

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