typo3 - TYPO3 CMS 中的 dotenv-connector

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

我尝试使用 helhum/dotenv-connector在我的 TYPO3 项目中。

我做了以下工作:

我的 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"

然后我从 web/typo3conf/LocalConfiguration.php 中删除了有关数据库的所有信息使用typo3_console-command
php vendor/bin/typo3cms configuration:remove DB

然后我跑了 composer installcomposer update再次。

现在在浏览器中调用 TYPO3 时,它一直告诉我

The requested database connection named "Default" has not been configured.



那么我错过了什么?显然是我的 .env根本没有被解析或使用。

仅供引用:Cachefile 写在 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';

最佳答案

我们的设置是这样工作的:

附加配置.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');

本地配置文件

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

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

关于typo3 - TYPO3 CMS 中的 dotenv-connector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41500306/

相关文章:

tomcat - Typo3 Solr,如何设置 solr 5.X

typo3 - 在 extbase/fluid 中使 imagefield 成为必需的

php - 打字3 7.6.10 : How to extend the felogin extension?

TYPO3:按page.layout自动换行CASE

doctrine-orm - TYPO3:如何为 Doctrine insert() 迁移 $GLOBALS ['TYPO3_DB' ]->quoteStr()

typo3 - 在 TYPO3 后端的页面 View 中显示列表

typo3 - 如何在 TYPO3 9 中设置新闻发言链接

mysql - 保存速度非常慢

Typo3 - 自己的 viewhelper 在 T3 V8 中转义 HTML

TYPO3 - TCA 迁移检查显示字段 'specConf' 的第 4 个参数 'showitem',字段名称 = 'sys_language_uid' 已迁移