Как переопределить system.mail.yml в Drupal 8? - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть следующий код в моем файле: core\modules\system\config\install\system.mail.yml

interface:
 default: 'php_mail'

Я хочу изменить код на:

interface:
 default: 'SMTPMailSystem'

Чтобы заставить работать мой модуль SMTP,При изменении кода в основном файле мой модуль работает.Поскольку внесение прямых изменений в основной файл не очень хорошо, я хочу знать, как мы переопределяем такие файлы.Я довольно новичок в Drupal 8, поэтому не смог пройти.

1 Ответ

0 голосов
/ 13 февраля 2019

Drupal имеет статью о Системе переопределения конфигурации , которая дает обзор и стартовый код для переопределения конфигураций, определенных в * .yml.Вы можете сразу перейти к разделу «Предоставление переопределений из модулей» для вашего случая.

Вкратце:

  1. Создать модуль (config_example, используемый в качестве примера)

  2. Создайте config_example.services.yml и вставьте:

services:
  config_example.overrider:
    class: \Drupal\config_example\ConfigExampleOverrides
    tags:
      - {name: config.factory.override, priority: 5}

config.factory.override - это важная вещь здесь, другие остаются за вамиизменить.

Определите класс, который реализует ConfigFactoryOverrideInterface:
namespace Drupal\config_example;

use Drupal\Core\Cache\CacheableMetadata;
use Drupal\Core\Config\ConfigFactoryOverrideInterface;
use Drupal\Core\Config\StorageInterface;

/**
 * Example configuration override.
 */
class ConfigExampleOverrides implements ConfigFactoryOverrideInterface {

  /**
   * {@inheritdoc}
   */
  public function loadOverrides($names) {
    $overrides = array();

    if (in_array('system.mail', $names)) { // (a)
      $overrides['system.mail'] = [
        'interface' => ['default' => 'SMTPMailSystem']
      ];
    }

    return $overrides;
  }

  /**
   * {@inheritdoc}
   */
  public function getCacheSuffix() {
    return 'ConfigExampleOverrider'; // (c)
  }

  /**
   * {@inheritdoc}
   */
  public function getCacheableMetadata($name) {
    return new CacheableMetadata();
  }

  /**
   * {@inheritdoc}
   */
  public function createConfigObject($name, $collection = StorageInterface::DEFAULT_COLLECTION) {
    return NULL;
  }

}

В вашем случае изменилось следующее:

(a) Игла in_array заменена наsystem.mail который является YML, который вы хотите переопределить.Значение, присвоенное $overrides['system.mail'], изменяется на то, что вы хотите разместить.

...