class DefaultFactory

Default plugin factory.

Instantiates plugin instances by passing the full configuration array as a single constructor argument. Plugin types wanting to support plugin classes with more flexible constructor signatures can do so by using an alternate factory such as Drupal\Component\Plugin\Factory\ReflectionFactory.

Hierarchy

Expanded class hierarchy of DefaultFactory

20 files declare their use of DefaultFactory
AggregatorPluginManager.php in drupal/core/modules/aggregator/lib/Drupal/aggregator/Plugin/AggregatorPluginManager.php
Contains \Drupal\aggregator\Plugin\AggregatorPluginManager.
ArchiverManager.php in drupal/core/lib/Drupal/Core/Archiver/ArchiverManager.php
BlockManager.php in drupal/core/modules/block/lib/Drupal/block/Plugin/Type/BlockManager.php
CKEditorPluginManager.php in drupal/core/modules/ckeditor/lib/Drupal/ckeditor/CKEditorPluginManager.php
Contains \Drupal\ckeditor\CKEditorPluginManager.
ConditionManager.php in drupal/core/lib/Drupal/Core/Condition/ConditionManager.php
Contains \Drupal\Core\Condition\ConditionManager.

... See full list

File

drupal/core/lib/Drupal/Component/Plugin/Factory/DefaultFactory.php, line 21
Definition of Drupal\Component\Plugin\Factory\DefaultFactory.

Namespace

Drupal\Component\Plugin\Factory
View source
class DefaultFactory implements FactoryInterface {

  /**
   * The object that retrieves the definitions of the plugins that this factory instantiates.
   *
   * The plugin definition includes the plugin class and possibly other
   * information necessary for proper instantiation.
   *
   * @var Drupal\Component\Plugin\Discovery\DiscoveryInterface
   */
  protected $discovery;

  /**
   * Constructs a Drupal\Component\Plugin\Factory\DefaultFactory object.
   */
  public function __construct(DiscoveryInterface $discovery) {
    $this->discovery = $discovery;
  }

  /**
   * Implements Drupal\Component\Plugin\Factory\FactoryInterface::createInstance().
   */
  public function createInstance($plugin_id, array $configuration) {
    $plugin_definition = $this->discovery
      ->getDefinition($plugin_id);
    $plugin_class = static::getPluginClass($plugin_id, $plugin_definition);
    return new $plugin_class($configuration, $plugin_id, $plugin_definition);
  }

  /**
   * Finds the class relevant for a given plugin.
   *
   * @param string $plugin_id
   *   The id of a plugin.
   * @param array $plugin_definition
   *   The plugin definition associated to the plugin_id.
   *
   * @return string
   *   The appropriate class name.
   */
  public static function getPluginClass($plugin_id, array $plugin_definition = NULL) {
    if (empty($plugin_definition['class'])) {
      throw new PluginException(sprintf('The plugin (%s) did not specify an instance class.', $plugin_id));
    }
    $class = $plugin_definition['class'];
    if (!class_exists($class)) {
      throw new PluginException(sprintf('Plugin (%s) instance class "%s" does not exist.', $plugin_id, $class));
    }
    return $class;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DefaultFactory::$discovery protected property The object that retrieves the definitions of the plugins that this factory instantiates.
DefaultFactory::createInstance public function Implements Drupal\Component\Plugin\Factory\FactoryInterface::createInstance(). Overrides FactoryInterface::createInstance 4
DefaultFactory::getPluginClass public static function Finds the class relevant for a given plugin.
DefaultFactory::__construct public function Constructs a Drupal\Component\Plugin\Factory\DefaultFactory object.