upstreamable / drupal-settings-installer
Requires
- php: ^8.0
- composer-plugin-api: ^2.0
- composer-runtime-api: ^2.1
- drupal/core-composer-scaffold: ^10.0 || ^11.0
Suggests
- upstreamable/drupal-settings-db-env: Configure your database credentials using environment variables.
- upstreamable/drupal-settings-db-sqlite-private: Use a sqlite database stored as a private file.
README
此包使用来自 drupal/core-composer-scaffold
的脚手架接管 Drupal 的 settings.php 文件,并允许它通过在 vendor
目录中具有 drupal-settings
类型的 composer 包来管理 Drupal 设置。
安装
composer require upstreamable/drupal-settings-installer
该包自动将自己添加到 drupal/core-composer-scaffold
允许的包列表中。之后,可以通过环境变量或只需 sqlite 时使用 upstreamable/drupal-settings-db-sqlite-private 来管理数据库凭证,可以使用 upstreamable/drupal-settings-db-env。
为什么?
Composer 项目模板很棒,除了它们是“分叉并忘记”模式。这意味着各种项目文件可以在上游改进时漂移并丢失更新。与项目模板或站点安装一起安装的初始 settings.php
文件是一个单体,不支持环境变量,并混合了站点设置、数据库凭证和配置覆盖。
此包旨在通过允许通过要求 composer 包包含设置的小块来解决该问题。
例如,如果您有一些仅用于开发的设置,可以将这些设置添加到根 composer.json
的 require-dev
部分。
它是如何工作的?
包含的 settings.php
搜索已安装的 composer 包中具有 drupal-settings
类型的包。每个包都有一个由其版本中的补丁号确定的权重。例如,版本为 1.0.20
的包将具有 20
的权重。较重的设置将在较晚应用并因此覆盖由该插件或较轻的设置设置的默认值。例如,请参阅 upstreamable/drupal-settings-db-env。
这也意味着补丁版本号将不会具有通常的含义,并且只有主版本和次要版本号会增加。
默认值
插件设置了一些默认值,可以在 assets/default.settings.php
文件中看到。可以通过具有修改其值的设置文件或在某些情况下使用环境变量(如 DRUPAL_HASH_SALT)来覆盖这些值。
自定义设置
尽管可以将一些代码附加到脚手架的 setting.php
,但最好创建一个本地 composer 包,以便所有设置都在 vendor 文件夹中。需要创建一个 packages
目录并将其添加到根 composer.json
的仓库中,例如
"repositories": [
{
"type": "composer",
"url": "https://packages.drupal.org/8"
},
{
"type": "path",
"url": "packages/*"
}
],
然后创建一个 packages/custom-settings
,并具有如下所示的简化 composer.json
文件
{
"name": "upstreamable/custom-settings",
"version": "1.0.99",
"type": "drupal-settings",
}
注意补丁版本号中的 99
以获得高权重,这将覆盖较轻包的设置。在同一级别创建一个包含自定义设置的 settings.php
,例如
<?php
$settings['config_sync_directory'] = '../config/sync';
这覆盖了使用 ../config
作为同步目录的默认设置。
最后,运行 composer require upstreamable/custom-settings
,新值应该生效。
更多带有 Drupal 设置的包
开发包
致谢
它受到了bluehorndigital/mojo-drupal-scaffold
的启发,该项目提供了用于设置Drupal项目的文件。Drupal设置安装程序只负责处理settings.php
系统配置,并不决定如何提供环境变量(例如,在Docker容器中作为系统变量或通过.env
文件来提供)。mojo drupal scaffold项目还提供了对如redis或flysystem等贡献模块的配置,但通过此插件,这些配置可以被分离到它们自己的项目中。