pattern_library-8.x-2.x-dev/src/PatternLibraryFactory.php

src/PatternLibraryFactory.php
<?php

namespace Drupal\pattern_library;

use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
use Drupal\Component\Plugin\Factory\DefaultFactory;
use Drupal\Core\TypedData\TypedDataInterface;

/**
 * Define the pattern library factory.
 */
class PatternLibraryFactory extends DefaultFactory {

  /**
   * {@inheritdoc}
   */
  public function createInstance($plugin_id, array $configuration = []) {
    $plugin_definition = $this->discovery->getDefinition($plugin_id);
    $plugin_typed_data = $this->getPatternLibraryTypedData($plugin_definition);

    /** @var \Symfony\Component\Validator\ConstraintViolation $violation */
    foreach ($plugin_typed_data->validate() as $violation) {
      throw new InvalidPluginDefinitionException(
        $plugin_id, $violation->getMessage()
      );
    }
    $configuration['typed_data'] = $plugin_typed_data;

    $plugin_class = static::getPluginClass(
      $plugin_id, $plugin_definition, $this->interface
    );

    if (is_subclass_of($plugin_class, 'Drupal\Core\Plugin\ContainerFactoryPluginInterface')) {
      return $plugin_class::create(
        \Drupal::getContainer(), $configuration, $plugin_id, $plugin_definition
      );
    }

    return new $plugin_class($configuration, $plugin_id, $plugin_definition);
  }

  /**
   * Get pattern library typed data.
   *
   * @param array $value
   *   The pattern library plugin definition value.
   *
   * @return TypedDataInterface
   *   The pattern library type data.
   */
  protected function getPatternLibraryTypedData(array $value) {
    /** @var \Drupal\Core\TypedData\DataDefinitionInterface $data_definition */
    $data_definition = $this
      ->typedDataManager()
      ->createDataDefinition('pattern_library');

    return $this->typedDataManager()
      ->create($data_definition, $value);
  }

  /**
   * Get the typed data manager.
   *
   * @return \Drupal\Core\TypedData\TypedDataManagerInterface
   *   The typed data manager.
   */
  protected function typedDataManager() {
    return \Drupal::service('typed_data_manager');
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc