I try to use helhum/dotenv-connector in my TYPO3 Project.
I have done the following:
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"
}
}
}
Then I ran
composer install
After that I setup the TYPO3 using the command
php vendor/bin/typo3cms install:setup
This should be similar with doing the install the "normal" way.
After that, i placed a .env next to my composer.json
This .env contains the following:
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"
Then i removed all informations about the DB from web/typo3conf/LocalConfiguration.php using the typo3_console-command
php vendor/bin/typo3cms configuration:remove DB
I then ran composer install and composer update again.
When calling the TYPO3 in the browser now, it keeps telling me
The requested database connection named "Default" has not been configured.
So what am i missing? Obviously my .env is not parsed or used at all.
FYI: Cachefile is written in var/cache with the following content:
<?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';
Our setups work like this:
$loader = new Dotenv\Dotenv(__DIR__ . '/../../', '.env.defaults');
$loader->load();
$loader = new Dotenv\Dotenv(__DIR__ . '/../../');
$loader->overload();
Interesting to see here that we run with a .env.defaults file that holds the standard config (no users or passwords of course) which we then overload with the custom .env file per user/environment.
This helps a lot when adding new functionality which requires a new .env configuration so other people on the team don't run into Fatals or Exceptions.
$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>',
],
],
]...
I didn't paste the entire config but I think you get the point.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With