You are here

public function FeedsAnnotationFactory::createInstance in Feeds 8.3

Creates a pre-configured instance of a plugin.

Parameters

string $plugin_id: The ID of the plugin being instantiated.

array $configuration: An array of configuration relevant to the plugin instance.

Return value

object A fully configured plugin instance.

Throws

\Drupal\Component\Plugin\Exception\PluginException If the instance cannot be created, such as if the ID is invalid.

Overrides ContainerFactory::createInstance

File

src/Plugin/Type/FeedsAnnotationFactory.php, line 17

Class

FeedsAnnotationFactory
Plugin factory which uses the plugin definition to find arguments.

Namespace

Drupal\feeds\Plugin\Type

Code

public function createInstance($plugin_id, array $configuration = []) {
  $definition = $this->discovery
    ->getDefinition($plugin_id);
  if (empty($definition['arguments'])) {
    return parent::createInstance($plugin_id, $configuration);
  }
  @trigger_error('FeedsAnnotationFactory is deprecated in Feeds 8.x-3.0-alpha6 and will be removed before Feeds 8.x-3.0. Implement \\Drupal\\Core\\Plugin\\ContainerFactoryPluginInterface instead.', E_USER_DEPRECATED);

  // Find arguments from the annotation.
  $arguments = [
    $configuration,
    $plugin_id,
    $definition,
  ];
  foreach ($definition['arguments'] as $argument) {
    if (substr($argument, 0, 1) === '@') {
      $arguments[] = \Drupal::service(substr($argument, 1));
    }
    elseif (substr($argument, 0, 1) === '%' && substr($argument, -1) === '%') {
      $arguments[] = \Drupal::getContainer()
        ->getParameter(substr($argument, 1, -1));
    }
    else {
      $arguments[] = $argument;
    }
  }
  $ref_class = new \ReflectionClass(static::getPluginClass($plugin_id, $definition, $this->interface));
  return $ref_class
    ->newInstanceArgs($arguments);
}