Yii2 定义控制台应用程序的环境

Yii2 defining environment of console application

如何在Yii2中定义控制台应用程序的环境?在网络应用程序中很简单。您只需将自定义声明添加到 Apache 虚拟主机配置中即可。例如:

虚拟主机配置:

SetEnv APPLICATION_ENV production

Yii2入门脚本:

$env = !empty( $_SERVER['APPLICATION_ENV'] ) ? $_SERVER['APPLICATION_ENV'] : 'dev';

defined( 'YII_DEBUG' ) or define( 'YII_DEBUG', true );
defined( 'YII_ENV' ) or define( 'YII_ENV', $env );

我有三个环境:开发、测试、生产。那么我应该如何在控制台应用程序中设置合适的环境呢?因为每个环境都有特定的配置等

我的应用程序基于基本应用程序模板。

几天前我遇到了同样的问题。 yii 控制台应用程序无法从 VirtualHost 设置中读取环境变量。

我的解决方法是调用 php_uname() 函数来获取 PHP 在 运行 上的完整操作系统名称,并使用它来区分我的环境。如果你的三个环境在三台不同的(虚拟)机器上运行,你可以试试这个方法。

php_uname doc

如果所有控制台应用程序的环境始终相同,最好在 config/console.php 中进行设置。只需添加类似

的内容
defined('YII_ENV') or define('YII_ENV', 'console');

当不同机器的环境应该不同时,gethostnameswitch-case 将代表最干净的环境设置方式。

switch (gethostname()) {
case "machine1": define('YII_ENV', "console-test"); break;
// more case statements
default: define('YII_ENV', "console");

您可以添加带有环境的本地文件,例如yii.env

<?php
defined('YII_ENV') or define('YII_ENV', 'prod');

并在文件 yii 中添加:

if (is_file('yii.env')){
    include 'yii.env';
}