如何定义应用程序中随处可用的全局常量?

saf*_*iot 4 php yii

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

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

'params'=>array(
            'upload_dir'=>Yii::app()->baseUrl . '/images/uploads/',
),
Run Code Online (Sandbox Code Playgroud)

但是Yii::app()->baseUrl在配置文件中使用了cannott.

Jon*_*Jon 12

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

define ('UPLOAD_DIR', Yii::app()->baseUrl . '/images/uploads/');
Run Code Online (Sandbox Code Playgroud)

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

编辑:当我说过createApplication之前和之后run,我的确意味着(同样,并不是说有一个createWebApplication和一个createApplication,这是前者的更通用版本).

所以,如果你现在有

Yii::createWebApplication(...)->run();
Run Code Online (Sandbox Code Playgroud)

你必须把它拆分成

Yii::createWebApplication(...);
define ('UPLOAD_DIR', Yii::app()->baseUrl . '/images/uploads/');
Yii::app()->run();
Run Code Online (Sandbox Code Playgroud)

另一种选择是将另一个属性添加到您的应用程序类.例如,如果您class MyApplicationprotected/components目录中有一个内部,那么您可以简单地执行此操作:

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

然后你可以访问它Yii::app()->uploadDir.