config_override-8.x-1.x-dev/src/ConfigOverrideServiceProvider.php

src/ConfigOverrideServiceProvider.php
<?php

namespace Drupal\config_override;

use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\DependencyInjection\ServiceModifierInterface;
use Symfony\Component\DependencyInjection\Parameter;
use Symfony\Component\Dotenv\Dotenv;

/**
 * Adds an environment config override service, if DotEnv is available.
 */
class ConfigOverrideServiceProvider implements ServiceModifierInterface {

  /**
   * {@inheritdoc}
   */
  public function alter(ContainerBuilder $container) {
    if (class_exists('\Symfony\Component\Dotenv\Dotenv')) {
      $drupal_root = $container->hasParameter('app.root') ? $container->getParameter('app.root') : DRUPAL_ROOT;
      $dotenv = new Dotenv();
      $all_config_overrides = [];
      $possible_files = [
        $drupal_root . '/sites/default/.env',
        $drupal_root . '/sites/default/.environment',
      ];

      foreach ($possible_files as $possible_file) {
        if (file_exists($possible_file)) {
          $env_content = $dotenv->parse(file_get_contents($possible_file), $possible_file);
          foreach ($env_content as $env_name => $env_value) {
            if (strpos($env_name, 'CONFIG___') === 0) {
              $env_name = strtolower($env_name);
            }
            if (strpos($env_name, 'config___') === 0) {
              [, $config_name, $config_key] = explode('___', $env_name);
              $config_name = str_replace('__', '.', $config_name);
              $config_key = str_replace('__', '.', $config_key);
              $all_config_overrides[strtolower($config_name)][$config_key] = $env_value;
            }
          }
        }
      }

      $container->setParameter('config_override__environment', $all_config_overrides);

      $container->register('config_override.override_environment', '\Drupal\config_override\EnvironmentConfigOverride')
        ->addArgument(new Parameter('config_override__environment'))
        ->addTag('config.factory.override', ['priority' => 0]);
    }
  }

}

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

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