首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在配置文件安装后以编程方式更改config_sync_directory路径?

是否可以在配置文件安装后以编程方式更改config_sync_directory路径?
EN

Drupal用户
提问于 2022-05-31 05:09:37
回答 1查看 414关注 0票数 0

使用自定义配置文件安装Drupal 9,我在"config_sync_directory"数组中的settings.php文件中定义了$settings,以便在安装过程中获取配置文件配置。

  1. 在站点安装过程中,Drupal要求在设置文件中指定"config“目录。
  2. 在自定义配置文件中,我有一些默认配置,我希望Drupal在安装过程中从该目录中读取配置,这是我在设置文件中指定的路径。
  3. 现在,安装后我想指定一个单独的配置同步目录,不想一次又一次地编辑settings.php文件,只是想从自定义模块的钩子中更新同步目录路径。

是否可以从钩子中以编程方式更改路径?

EN

回答 1

Drupal用户

回答已采纳

发布于 2022-05-31 07:47:04

模块可以覆盖配置对象中的值。正如配置覆盖系统/从模块提供重写中所描述的,模块需要实现标记为config.factory.override的服务。用于服务的类需要实现ConfigFactoryOverrideInterface,文档中给出的示例就是这样做的。

代码语言:javascript
复制
services:
  config_example.overrider:
    class: Drupal\config_example\Config\ConfigExampleOverrides
    tags:
      - {name: config.factory.override, priority: 5}
代码语言:javascript
复制
namespace Drupal\config_example\Config;

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 = [];
    if (in_array('system.site', $names)) {
      $overrides['system.site'] = ['name' => 'Overridden site name!'];
    }
    return $overrides;
  }

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

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

}

请记住,settings.php文件中的值总是覆盖模块值。对于要设置配置值的模块,settings.php文件不需要设置它。

票数 0
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/311391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档