TYPO3 CMS中的dotenv-connector

时间:2017-01-06 06:39:37

标签: typo3 typo3-7.6.x typo3-8.x

我尝试在我的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

这应该与安装"正常"类似。办法。

之后,我在.env

旁边放置了composer.json

.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 installcomposer 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';

3 个答案:

答案 0 :(得分:6)

我们的设置如下:

AdditionalConfiguration.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>',
        ],
    ],
]...

我没有粘贴整个配置,但我认为你明白了。

答案 1 :(得分:3)

dotenv-connector将.env文件读入环境,但不为TYPO3配置变量分配任何值。您应该能够在PHP代码中使用getenv读取它们。 连接器不是专门针对TYPO3,而是任何基于作曲家的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()手动分配值。

答案 2 :(得分:1)

PHP 7.2(在TYPO3 v9上)和argon哈希的用法的一个重要说明: 您必须对.env文件中的值 使用单引号/对号。 例: 代替my_value="foobar"my_value='foobar'