promet / settings_compile
Requires
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-14 17:26:40 UTC
README
动机
您应该能够像处理简单的字典一样处理 settings.php 中表示的 Drupal 配置,这个字典可以用任何可以表示字典的格式进行序列化,因为 settings.php 实际上就是这样。这使得更改设置变得简单,即使不知道 php,甚至无需登录到服务器或进行任何 git 提交。您可能希望允许这样做,因为您的应用程序很可能需要存在于其历史中任意提交的多个不同环境中。
另一种策略是对 settings.php 进行版本控制,使其根据使用 getenv()
获取的环境变量设置配置变量。如果您控制着环境变量对运行中的 php 进程的可见性,那么这种方法更可取。
如何使用
使用 composer 安装此项目。
查看 examples/config.yml
并观察以这种方式调用时的结果 settings.php
vendor/bin/settings_compile vendor/winmillwill/settings_compile/examples/config.yml settings.php
或者您可以这样做
vendor/bin/settings_compile https://raw.githubusercontent.com/winmillwill/settings_compile/master/examples/config.yml settings.php
该命令简单地接受一个正确格式化的 yaml 文件的路径以及要写入结果 settings.php 文件的所需路径。
模式
您可以在 Drupal\Settings\Schema 中非常明显地看到这一点,但关键是您通过使用 settings 键来处理 settings.php 中可修改的全局变量,因此您的数据库散列将像这样开始
drupal: ... settings: databases: ...
在 settings 下可以设置的键仅限于以下列表
数据库
cookie_domain
conf
installed_profile
update_free_access
db_url
db_prefix
drupal_hash_salt
is_https
base_url
base_secure_url
base_insecure_url
base_url
您可以通过这种方式指定 composer 自动加载器(或任何其他 php 文件)(对于 2.0.x)
drupal:
...
include:
require:
- $DRUPAL_ROOT/relative/path/to/vendor/autoload.php
这之所以可行,是因为所有值在 2.0.x 中都是天真地引用的。
您还可以指定完整的路径,而无需使用 DRUPAL_ROOT
宏,但这将要求编辑 yaml 文件的人知道服务器上 Drupal 应用程序的完整路径。
您还可以通过这种方式影响 ini 设置
drupal:
...
ini:
xdebug.show_exception_trace: 1
从 2.1.1 版本开始,您可以通过在值前加上 %
来禁用引号,这为您提供了对 php 的完全访问权限
drupal:
...
include:
require:
- %DRUPAL_ROOT . '/relative/path/to/vendor/autoload.php'
同样,任何以 $
开头的值也被天真地留下未处理。
使用环境变量的替代策略
您还可以使用 %
转义来创建一个可以非常容易地将配置建模为对其环境有所了解的 yaml 文件
drupal:
...
settings:
db_url: %getenv('DRUPAL_DB_URL')
这使得为您的 PAAS 设置变得简单,但这开始提出一个问题,即使用 yaml 与只是对 php 文件进行版本控制并让另一个系统管理设置环境变量相比,您是否真的获得了任何好处,如上所述在 动机 中所述。