如何定义应用程序中任何位置可用的全局常量


How to define a global constant available everywhere in the application?

如何定义一个UPLOAD_DIR常量(或等效的常量),以便我可以在任何地方使用它?

我尝试将其作为应用程序配置参数

'params'=>array(
            'upload_dir'=>Yii::app()->baseUrl . '/images/uploads/',
),

但是Yii::app()->baseUrl不能在配置文件中使用。

您可以在 index.php 中执行此操作,在调用 Yii::createApplication 之后和 Yii::app()->run() 之前:

define ('UPLOAD_DIR', Yii::app()->baseUrl . '/images/uploads/');

然后,您可以像使用任何其他PHP常量一样使用它,例如 echo UPLOAD_DIR .

编辑:当我在createApplication之后和run之前说时,我的意思正是如此(另外,并不是说既有createWebApplication又有createApplication,这是前者的更通用版本)。

所以如果你目前有

Yii::createWebApplication(...)->run();

你必须把它分成

Yii::createWebApplication(...);
define ('UPLOAD_DIR', Yii::app()->baseUrl . '/images/uploads/');
Yii::app()->run();

另一种选择是仅向应用程序类添加另一个属性。例如,如果您的protected/components目录中有一个class MyApplication,那么您可以简单地执行以下操作:

class MyApplication extends CWebApplication {
    // ...other code...
    public function getUploadDir() {
        return $this->baseUrl.'/images/uploads/';
    }
}

然后,您将以Yii::app()->uploadDir 的形式访问它。