TYPO3 CMS 中的 dotenv-connector
Posted
技术标签:
【中文标题】TYPO3 CMS 中的 dotenv-connector【英文标题】:dotenv-connector within TYPO3 CMS 【发布时间】:2017-05-20 21:32:48 【问题描述】:我尝试在我的 TYPO3 项目中使用 helhum/dotenv-connector。
我做了以下事情:
我的composer.json
:
"require":
"typo3/cms": "^8.5",
"helhum/dotenv-connector": "1.0.0",
"helhum/typo3-console": "^4.1"
,
"extra":
"helhum/typo3-console":
"install-extension-dummy": false
,
"typo3/cms":
"cms-package-dir": "$vendor-dir/typo3/cms",
"web-dir": "web"
,
"helhum/dotenv-connector":
"env-dir": "",
"allow-overrides": true,
"cache-dir": "var/cache"
然后我跑了
composer install
之后我使用命令设置 TYPO3
php vendor/bin/typo3cms install:setup
这应该与以“正常”方式进行安装类似。
在那之后,我在我的composer.json
旁边放了一个.env
此.env
包含以下内容:
TYPO3_CONTEXT="Development"
TYPO3__DB__database="dotenvconnector"
TYPO3__DB__host="127.0.0.1"
TYPO3__DB__password="root"
TYPO3__DB__port="3306"
TYPO3__DB__username="root"
然后我使用typo3_console-command从web/typo3conf/LocalConfiguration.php
删除了所有关于数据库的信息
php vendor/bin/typo3cms configuration:remove DB
然后我又跑了composer install
和composer update
。
现在在浏览器中调用TYPO3时,它一直在告诉我
请求的名为“默认”的数据库连接尚未配置。
那么我错过了什么?显然我的.env
根本没有被解析或使用。
仅供参考:缓存文件写入 var/cache 中,内容如下:
<?php
putenv('TYPO3__DB__database=dotenvconnector');
$_ENV['TYPO3__DB__database'] = 'dotenvconnector';
$_SERVER['TYPO3__DB__database'] = 'dotenvconnector';
putenv('TYPO3__DB__host=localhost');
$_ENV['TYPO3__DB__host'] = 'localhost';
$_SERVER['TYPO3__DB__host'] = 'localhost';
putenv('TYPO3__DB__password=root');
$_ENV['TYPO3__DB__password'] = 'root';
$_SERVER['TYPO3__DB__password'] = 'root';
putenv('TYPO3__DB__port=3306');
$_ENV['TYPO3__DB__port'] = '3306';
$_SERVER['TYPO3__DB__port'] = '3306';
putenv('TYPO3__DB__username=root');
$_ENV['TYPO3__DB__username'] = 'root';
$_SERVER['TYPO3__DB__username'] = 'root';
【问题讨论】:
TYPO3 7.6 中也存在问题。* 【参考方案1】:我们的设置是这样工作的:
附加配置.php
$loader = new Dotenv\Dotenv(__DIR__ . '/../../', '.env.defaults');
$loader->load();
$loader = new Dotenv\Dotenv(__DIR__ . '/../../');
$loader->overload();
有趣的是,在这里我们使用包含标准配置(当然没有用户或密码)的 .env.defaults
文件运行,然后我们使用每个用户/环境的自定义 .env
文件重载该文件。
这在添加需要新的 .env
配置的新功能时很有帮助,这样团队中的其他人就不会遇到致命或异常。
$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['dbname'] = getenv('TYPO3_DB_NAME');
$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['host'] = getenv('TYPO3_DB_HOST');
$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['password'] = getenv('TYPO3_DB_PASSWORD');
$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['user'] = getenv('TYPO3_DB_USER');
LocalConfiguration.php
return [
'BE' => [
'debug' => '<set by dotenv>',
'explicitADmode' => 'explicitAllow',
'installToolPassword' => '<set by dotenv>',
'loginSecurityLevel' => 'rsa',
'sessionTimeout' => '<set by dotenv>',
],
'DB' => [
'Connections' => [
'Default' => [
'charset' => 'utf8',
'dbname' => '<set by dotenv>',
'driver' => 'mysqli',
'host' => '<set by dotenv>',
'password' => '<set by dotenv>',
'port' => 3306,
'user' => '<set by dotenv>',
],
],
]...
我没有粘贴整个配置,但我想你明白了。
【讨论】:
你使用 helhum 的 dot-env-connector 吗?或者这是另一种方法?正如你在这里看到的:github.com/helhum/TYPO3-Distribution/blob/master/.env-example 你可以使用这个:设置任意 TYPO3_CONF_VARS 值,遵循约定:TYPO3__dotenv-connector 将 .env 文件读取到环境中,但不会为 TYPO3 配置变量分配任何值。您应该能够在您的 php 代码中使用 getenv
阅读它们。
该连接器并非专门针对 TYPO3,而是适用于任何基于 composer 的 php 应用程序的通用工具。因此,了解 TYPO3 特定的变量分配将超出项目的范围。
还有另一个项目,配置加载器,可以帮助将环境变量分配给 TYPO3 配置变量。
.env -dotenv-connector-> environment -configuration-loader-> $GLOBALS['TYPO3_CONF_VARS']
配置加载器可以在https://github.com/helhum/config-loader 找到。在https://github.com/helhum/TYPO3-Distribution 中连接在一起的一个例子。
您不必使用配置加载器。您也可以使用 getenv() 手动分配值。
【讨论】:
【参考方案3】:关于 PHP 7.2(在 TYPO3 v9 上)和 argon
哈希的使用的一个重要说明:
您必须对.env
文件中的值使用单引号/刻度。
例子:
而不是my_value="foobar"
写my_value='foobar'
【讨论】:
以上是关于TYPO3 CMS 中的 dotenv-connector的主要内容,如果未能解决你的问题,请参考以下文章
在 TYPO3 CMS 中调试 Typoscript 的最佳方法是啥?
如何在TYPO3 V9中通过composer安装typo3 / cms-workspaces扩展
如何使用 extbase 在 TYPO3 CMS 6.0 上引导插件?
PHP OpenSSL 扩展在安装 TYPO3 CMS 7.4.0 时不起作用
TYPO3 9.5-使用cms-redirects进行重定向
表 '***.tx_scheduler_task' 在“composer typo3/cms-scheduler”之后不存在