dotenv-коннектор в TYPO3 CMS

Я пытаюсь использовать helhum/dotenv-connector в своем проекте TYPO3.

Я сделал следующее:

my 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.

php vendor/bin/typo3cms configuration:remove DB

Затем я снова запустил composer install и composer update.

Теперь при вызове TYPO3 в браузере он постоянно говорит мне

Запрошенное соединение с базой данных с именем «По умолчанию» не настроено.

Итак, что мне не хватает? Очевидно, мой .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';

person randomresult    schedule 06.01.2017    source источник
comment
проблема также присутствует в TYPO3 7.6.*   -  person randomresult    schedule 06.01.2017


Ответы (3)


Наши установки работают так:

Дополнительная конфигурация.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');

Локальная конфигурация.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>',
        ],
    ],
]...

Я не вставлял весь конфиг, но думаю, вы поняли.

person Mathias Schreiber    schedule 06.01.2017
comment
Используете ли вы dot-env-connector от Helhum? Или это другой подход? Как вы можете видеть здесь: github.com/helhum/TYPO3-Distribution /blob/master/.env-example вы можете использовать это: Установите произвольные значения TYPO3_CONF_VARS, следуя соглашению: TYPO3__‹section›[__‹sub-section›]__property Таким образом, в его дистрибутиве это работает из коробки и я не понимаю, чего мне не хватает. Попробую и ваш подход. Спасибо за ответ. - person randomresult; 06.01.2017
comment
@randomresult Это тот же подход (анализ .env-файлов и перезапись настроек TYPO3), но без использования »helhum/dotenv-connector«. - person pixelbrackets; 14.06.2017
comment
Для уточнения: требуется »helhum/dotenv-connector«, который считывает файл .env еще до запуска TYPO3 и передает значения в среду. Эти значения необходимо прочитать и назначить TYPO3 вручную, используя getenv(), $_ENV или $_SERVER. Коннектор не перезаписывает настройки автоматически. Вы можете сделать это в AdditionalConfiguration.php например. $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['host'] = getenv('TYPO3__DB__host');. «helhum/TYPO3-Distribution» также содержит пакет «helhum/config-loader», который автоматически объединяет настройки TYPO3 и значения .env. - person pixelbrackets; 14.06.2017
comment
@mathias-schreiber является 'DB' => [ 'Connections' => [ 'Default' => [ ... допустимым синтаксисом для LocalConfirguration.php ? - person Andrew Luca; 23.11.2017

Коннектор dotenv считывает файл .env в среду, но не присваивает никаких значений переменным конфигурации TYPO3. Вы должны иметь возможность читать их с помощью getenv в вашем php-коде. Коннектор не предназначен специально для 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().

person SomeBdyElse    schedule 09.01.2017

Одно важное замечание по PHP 7.2 (на TYPO3 v9) и использованию хэша argon: вы должны использовать одинарные кавычки/галочки для значений в файле .env. Пример: Вместо my_value="foobar" напишите my_value='foobar'

person Ralf Merz    schedule 26.09.2018