jsonapi_extras-8.x-3.16/src/JsonapiExtrasServiceProvider.php

src/JsonapiExtrasServiceProvider.php
<?php

namespace Drupal\jsonapi_extras;

use Drupal\Core\Config\BootstrapConfigStorageFactory;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\DependencyInjection\ServiceProviderBase;
use Symfony\Component\DependencyInjection\Reference;

/**
 * Replace the resource type repository for our own configurable version.
 */
class JsonapiExtrasServiceProvider extends ServiceProviderBase {

  /**
   * {@inheritdoc}
   */
  public function alter(ContainerBuilder $container) {
    $settings = BootstrapConfigStorageFactory::get()
      ->read('jsonapi_extras.settings');

    if ($settings !== FALSE) {
      if ($container->getParameter('jsonapi.base_path') !== '/jsonapi') {
        $container->setParameter('jsonapi_extras.base_path_override_disabled', TRUE);
      }
      else {
        $container->setParameter('jsonapi.base_path', '/' . $settings['path_prefix']);
        $container->setParameter('jsonapi_extras.base_path_override_disabled', FALSE);
      }
    }

    // Enable normalizers in the "src-impostor-normalizers" directory to be
    // within the \Drupal\jsonapi\Normalizer namespace in order to circumvent
    // the encapsulation enforced by
    // \Drupal\jsonapi\Serializer\Serializer::__construct().
    $container_namespaces = $container->getParameter('container.namespaces');
    $container_modules = $container->getParameter('container.modules');
    $jsonapi_impostor_path = dirname($container_modules['jsonapi_extras']['pathname']) . '/src-impostor-normalizers';
    $container_namespaces['Drupal\jsonapi\Normalizer\ImpostorFrom\jsonapi_extras'][] = $jsonapi_impostor_path;
    // Manually include the impostor definitions to avoid class not found error
    // during compilation, which gets triggered though cache-clear.
    $container->getDefinition('serializer.normalizer.field_item.jsonapi_extras')
      ->setFile($jsonapi_impostor_path . '/FieldItemNormalizerImpostor.php');
    $container->getDefinition('serializer.normalizer.resource_identifier.jsonapi_extras')
      ->setFile($jsonapi_impostor_path . '/ResourceIdentifierNormalizerImpostor.php');
    $container->getDefinition('serializer.normalizer.resource_object.jsonapi_extras')
      ->setFile($jsonapi_impostor_path . '/ResourceObjectNormalizerImpostor.php');
    $container->getDefinition('serializer.normalizer.content_entity.jsonapi_extras')
      ->setFile($jsonapi_impostor_path . '/ContentEntityDenormalizerImpostor.php');
    $container->getDefinition('serializer.normalizer.config_entity.jsonapi_extras')
      ->setFile($jsonapi_impostor_path . '/ConfigEntityDenormalizerImpostor.php');
    $container->setParameter('container.namespaces', $container_namespaces);
  }

  /**
   * {@inheritdoc}
   */
  public function register(ContainerBuilder $container) {
    $modules = $container->getParameter(('container.modules'));

    if (isset($modules['schemata_json_schema'])) {
      // Register field definition schema override.
      $container
        ->register('serializer.normalizer.field_definition.schema_json.jsonapi_extras', 'Drupal\jsonapi_extras\Normalizer\SchemaFieldDefinitionNormalizer')
        ->addTag('normalizer', ['priority' => 32])
        ->addArgument(new Reference('jsonapi.resource_type.repository'));

      // Register top-level schema override.
      $container
        ->register('serializer.normalizer.schemata_schema_normalizer.schema_json.jsonapi_extras', 'Drupal\jsonapi_extras\Normalizer\SchemataSchemaNormalizer')
        ->addTag('normalizer', ['priority' => 100])
        ->addArgument(new Reference('jsonapi.resource_type.repository'));
    }
  }

}

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

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