promet/settings_compile

此包的最新版本(2.1.3)没有可用的许可证信息。

2.1.3 2018-11-10 12:54 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 文件进行版本控制并让另一个系统管理设置环境变量相比,您是否真的获得了任何好处,如上所述在 动机 中所述。