Рейтинг:0

Можно ли программно изменить путь config_sync_directory после установки профиля?

флаг cn

Установка Drupal 9 с использованием пользовательского профиля установки, который я определил "config_sync_directory" в настройки.php файл в $ настройки массив, чтобы подобрать конфигурацию профиля во время установки.

  1. При установке сайта Drupal просит указать каталог "config" в файле настроек
  2. В пользовательском профиле у меня есть некоторые конфигурации по умолчанию, я хочу, чтобы Drupal читал конфигурации из этого каталога во время установки, путь, который я указал в файле настроек.
  3. Теперь, после установки, я хочу указать отдельный каталог синхронизации конфигурации и не хочу снова и снова редактировать файл settings.php, просто хотел обновить путь к каталогу синхронизации из хука в пользовательском модуле.

Можно ли изменить путь программно из хука?

leymannx avatar
флаг ne
Вы можете просто отредактировать settings.php, зачем вам его обновлять с какого-то хука?
Prashant Chauhan avatar
флаг cn
Пожалуйста, проверьте ниже причину, по которой я хотел этого, но похоже, что это невозможно.
leymannx avatar
флаг ne
Вы можете обновить это значение в любое время после установки, просто отредактировав settings.php. Я не вижу никакого объяснения, объясняющего, почему вы не можете этого сделать. Просто откройте settings.php в редакторе по вашему выбору (возможно, сначала очистите права доступа к файлам), отредактируйте это значение, сохраните (и, возможно, снова увеличьте права доступа к файлам). Просто убедитесь, что вы также переместили каталог конфигурации в новое место. Это все.
Prashant Chauhan avatar
флаг cn
@leymannx На самом деле я хотел добиться 1. При установке сайта Drupal просит указать каталог "config" в файле настроек 2. В пользовательском профиле у меня есть некоторые конфигурации по умолчанию, я хочу, чтобы Drupal читал конфигурации из этого каталога во время установки, путь, который я указал в файле настроек. 3. Теперь, после установки, я хочу указать отдельный каталог синхронизации конфигурации и не хочу снова и снова редактировать файл settings.php, просто хотел обновить путь к каталогу синхронизации из хука в пользовательском модуле. Надеюсь, я ясно изложил требования.
leymannx avatar
флаг ne
Когда вы устанавливаете профиль, его конфигурация считывается из каталога конфигурации профиля независимо от того, что вы настроили в settings.php. И очень важно, чтобы вы добавили это к своему вопросу. В противном случае вы не получите ответ, который ищете.
Prashant Chauhan avatar
флаг cn
@leymannx Это не так, во время установки он считывает конфигурацию из пути к конфигурации, указанного в файле настроек.
leymannx avatar
флаг ne
Если это не работает во время установки, значит, что-то не так в вашем профиле.Проверьте каталоги конфигурации других профилей (минимальный, стандартный) на предмет того, где именно должна быть конфигурация.
Рейтинг:0
флаг us

Модули могут переопределять значения в объектах конфигурации. Как описано в Система переопределения конфигурации / Предоставление переопределений из модулей, модуль должен реализовать службу с тегом config.factory.override. Класс, используемый для службы, должен реализовать ConfigFactoryOverrideInterface, как это делает пример, приведенный в документации.

Сервисы:
  config_example.overrider:
    класс: Drupal\config_example\Config\ConfigExampleOverrides
    теги:
      - {имя: config.factory.override, приоритет: 5}
пространство имен Drupal\config_example\Config;

используйте Drupal\Core\Cache\CacheableMetadata;
используйте Drupal\Core\Config\ConfigFactoryOverrideInterface;
используйте Drupal\Core\Config\StorageInterface;

/**
 * Пример переопределения конфигурации.
 */
класс ConfigExampleOverrides реализует ConfigFactoryOverrideInterface {

  /**
   * {@inheritdoc}
   */
  публичная функция loadOverrides($names) {
    $ переопределяет = [];
    если (in_array('system.site', $names)) {
      $overrides['system.site'] = ['name' => 'Имя переопределенного сайта!'];
    }
    вернуть $переопределения;
  }

  /**
   * {@inheritdoc}
   */
  общедоступная функция getCacheSuffix() {
    вернуть 'ConfigExampleOverrider';
  }
  
  /**
   * {@inheritdoc}
   */
  публичная функция getCacheableMetadata($name) {
    вернуть новые CacheableMetadata();
  }

  /**
   * {@inheritdoc}
   */
  общедоступная функция createConfigObject($name, $collection = StorageInterface::DEFAULT_COLLECTION) {
    вернуть НУЛЬ;
  }

}

Имейте в виду, что значение в настройки.php файл всегда переопределяет значения модуля. Для модуля, чтобы установить значение конфигурации, настройки.php файл не нужно устанавливать его.

Prashant Chauhan avatar
флаг cn
Я думаю, вы неправильно поняли мой вопрос. Я определяю путь к папке синхронизации конфигурации в settings.php, который работает правильно. Теперь, после успешной установки Drupal, я хочу обновить этот путь к папке синхронизации конфигурации, и это не конфигурация, а настройка.
флаг cn
Там нет хука для перезаписи глобальных настроек, если вы это имеете в виду. В нем нет необходимости, вы можете просто отредактировать settings.php, чтобы отразить желаемое новое значение, вместо того, чтобы редактировать хук в файле модуля.
4uk4 avatar
флаг cn
Да, настройки предназначены только для чтения. Только в тестах они заменяют весь экземпляр синглтона. Например, [KernelTestBase::setUpFilesystem](https://api.drupal.org/api/drupal/core%21tests%21Drupal%21KernelTests%21KernelTestBase.php/function/KernelTestBase%3A%3AsetUpFilesystem)
Prashant Chauhan avatar
флаг cn
Спасибо всем за разъяснения.
Rafael avatar
флаг uz
С помощью cli drush config-import --source=SOURCE вы можете определить конкретные папки конфигурации.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.