在维护多个 typo3 实例时,常常面临一个难题:每个实例的数据库连接、缓存设置、图片处理路径等配置都可能不同。如果直接在代码中硬编码这些配置,不仅难以维护,而且容易出错。更糟糕的是,每次部署都需要修改代码,这无疑增加了工作量和出错的风险。
为了解决这个问题,我尝试过多种方法,例如使用不同的配置文件,然后在代码中根据环境变量选择加载哪个文件。但是,这种方法不够优雅,而且随着配置项的增多,管理起来会越来越复杂。 直到我发现了 SourceBroker/configs 这个 composer 包。
SourceBroker/configs 允许你根据 TYPO3_CONTEXT 环境变量加载不同的配置文件。你只需按照一定的目录结构组织你的配置文件,然后在 typo3conf/AdditionalConfiguration.php 中添加几行代码即可。
首先,使用 Composer 安装该包:
composer require sourcebroker/configs
然后,在 typo3conf/AdditionalConfiguration.php 文件中添加以下代码:
<?phpdefined('TYPO3') or die();SourceBrokerConfigTypo3Config::initialize() ->appendContextToSiteName() ->includeContextDependentConfigurationFiles();
接下来,你需要在 config/context 目录下创建子目录,例如 1_verbosity、2_mode、3_instance 等。 目录名中的数字决定了配置文件的优先级,数字越小优先级越高。 在这些子目录下,创建与 TYPO3_CONTEXT 值对应的 PHP 文件,例如 config/context/3_instance/Production.php、config/context/3_instance/Staging.php 等。
例如,如果你的 TYPO3_CONTEXT 设置为 Production/Staging/Beta,那么系统将依次加载 config/context/1_verbosity/Production.php、config/context/2_mode/Staging.php 和 config/context/3_instance/Beta.php 这三个文件中的配置。 你可以根据需要创建任意数量的目录和文件,来满足不同的配置需求。
为了更好地理解,可以参考官方提供的示例配置,它们位于 Resources/private/Examples/Example1/context 目录下。 记住,你可以随意更改目录名称(除了数字和下划线部分),但要保持数字下划线的命名约定。
更进一步,如果安装了 helhum/dotenv-connector 包,你还可以利用 .env 文件来管理部分配置,例如数据库连接信息。 这使得你可以将敏感信息存储在 git 仓库之外,提高安全性。
SourceBroker/configs 还提供了一个非常有用的功能:取消缓存异常。 你可以在配置文件中添加以下代码来禁用开发环境下的特定缓存配置:
$GLOBALS'TYPO3_CONF_VARS''configs''cacheConfigurations'['uncache'] = false;
总而言之,SourceBroker/configs 极大地简化了 TYPO3 多环境配置的管理。通过灵活的目录结构和环境变量控制,它使得配置管理更加高效、便捷,并且降低了出错的风险。 如果你正在寻找一种优雅的方式来管理 TYPO3 的多环境配置,强烈推荐你尝试一下这个 Composer 包。 学习更多 Composer 的使用方法,可以参考这个在线学习地址:学习地址