Drupal имеет статью о Системе переопределения конфигурации , которая дает обзор и стартовый код для переопределения конфигураций, определенных в * .yml.Вы можете сразу перейти к разделу «Предоставление переопределений из модулей» для вашего случая.
Вкратце:
Создать модуль (config_example, используемый в качестве примера)
Создайте 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']
, изменяется на то, что вы хотите разместить.