如何在 yii 2 中使用 dotenv 切换环境?

问题描述 投票:0回答:1

我正在使用 yii 2 和

我安装了该软件包:

 "vlucas/phpdotenv": "^5.6"

在根目录中我有一个文件夹 env/dev/.env.dev

所以我更改了 web/index.php 文件,例如:

<?php
// phpcs:ignoreFile
$path = dirname(__DIR__ . '/', '../env/dev/.env.dev' );
require $path . '/vendor/autoload.php';
$dotEnv = Dotenv\Dotenv::createImmutable($path);
$dotEnv->load();

defined('YII_DEBUG') or define('YII_DEBUG', $_ENV['YII_DEBUG']);
defined('YII_ENV') or define('YII_ENV', $_ENV['YII_ENV']);

require $path . '/vendor/yiisoft/yii2/Yii.php';

$config = require $path . '/config/web.php';

try {
    (new yii\web\Application($config))->run();
} catch (yii\base\InvalidConfigException $exception) {
    echo $exception->getMessage();
}

但是后来我得到了这个错误:

<br />
<b>Fatal error</b>: Uncaught TypeError: dirname(): Argument #2 ($levels) must be of type int, string given in
C:\repos\internet_backend\web\index.php:3
Stack trace:
#0 C:\repos\internet_backend\web\index.php(3): dirname('C:\\repos\\intern...', '../env/dev/.env...')
#1 {main}
thrown in <b>C:\repos\internet_backend\web\index.php</b> on line <b>3</b><br />

所以我尝试过。请点击此链接:https://matthewsetter.com/set-environment-variables-php-dotenv/

并落实其建议

问题:如何运行.env.dev文件?

php yii2
1个回答
0
投票

函数

dirname()
将路径作为第一个参数。它将父目录的路径返回到给定路径。您可以选择提供第二个参数
$levels
,但它必须是 int,并且它表示在返回结果之前 dirname() 应该向上移动多少层。

__DIR__
魔法常量包含当前文件所在目录的路径。

所以,如果您在

/path/to/my/project/web/index.php
。然后
dirname(__DIR__)
将返回
/path/to/my/project

如果你想获得

/path/to/my/project/env/dev
内部
/path/to/my/project/web/index.php
的路径,你可以使用:

$path = dirname(__DIR__) . '/env/dev';

如果您的配置文件名为

.env.dev
而不是
.env
,您不能将其指定为目录路径的一部分,而是必须在
Dotenv\Dotenv::createImmutable($path, '.env.dev')
调用中提供文件名作为第二个参数。

所以整个代码可以如下所示:

<?php
// phpcs:ignoreFile
$path = dirname(__DIR__) . '/env/dev';
require $path . '/vendor/autoload.php';
$dotEnv = Dotenv\Dotenv::createImmutable($path, '.env.dev');
$dotEnv->load();

defined('YII_DEBUG') or define('YII_DEBUG', $_ENV['YII_DEBUG']);
defined('YII_ENV') or define('YII_ENV', $_ENV['YII_ENV']);

require $path . '/vendor/yiisoft/yii2/Yii.php';

$config = require $path . '/config/web.php';

try {
    (new yii\web\Application($config))->run();
} catch (yii\base\InvalidConfigException $exception) {
    echo $exception->getMessage();
}
© www.soinside.com 2019 - 2024. All rights reserved.