Yii - 如何在主配置中访问基本URL

Mah*_*kia 6 php url path yii

我正在开发Yii应用程序.我试图在我的主配置参数中设置一些路径,如下所示:

// application-level parameters that can be accessed
// using Yii::app()->params['paramName']
'params'=>array(
       'paths' => array(
            'imageTemp'=> Yii::getPathOfAlias('webroot').'/files/temp-',
            'image'=> Yii::getPathOfAlias('webroot').'/files/',
            ...
        ),

        'urls' => array(
            'imageTemp'=> Yii::app()->getBaseUrl().'/files/temp-',
            'image'=> Yii::app()->getBaseUrl().'/files/',
            ...
        ),
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

Fatal error: Call to a member function getBaseUrl() on a non-object in ..blahblah../base/CApplication.php on line 553
Run Code Online (Sandbox Code Playgroud)

我想我不能在配置文件中使用Yii :: app(),因为应用程序尚未在此处初始化,或类似的东西.那么,如何Yii::app()->getBaseUrl()在配置文件中替换并获得相同的结果?

Stu*_*Stu 5

你没错,你不能在config的返回数组中使用Yii :: app()方法,但你可以Yii::getPathOfAlias()在外面使用.像这样的东西可能会起作用:

$webroot = Yii::getPathOfAlias('webroot');
return array(
    ...
    'params'=>array(
        'paths' => array(
            'imageTemp'=> $webroot.'/files/temp-',
            'image'=> $webroot.'/files/',
            ...
        ),
    ),
);
Run Code Online (Sandbox Code Playgroud)

假设webroot是事先定义的.

至于baseUrl ......我会在那个回复你!

[背部...]

如果你需要一个网址,这一切都取决于你的图像文件保存位置,相对于yii路径,还是相对于网络根目录的基础?

如果是web root的基础,你可以使用:

return array(
    ...
    'urls'=>array(
        'paths' => array(
            'imageTemp'=> '/files/temp-',
            'image'=> '/files/',
            ...
        ),
    ),
);
Run Code Online (Sandbox Code Playgroud)

  • 作为一项规则,我试图避免在配置中使用任何与Yii相关的东西.该文件毕竟用于创建你的应用程序,你永远不知道什么会工作,什么不会:)但像$ _SERVER等东西可以随意使用.正如我上面已经说过的,如果你真的需要webroot,它的定义为dirname($ _ SERVER ['SCRIPT_FILENAME']).我通常在配置中定义自己的"BASEDIR",它是dirname(\ _ _ _ FILE\_\_ _).'/../ ..',我更喜欢这个.但每一个他自己 :) (3认同)
  • 在加载应用程序的配置后创建webroot别名,因此即使您使用该调用,该别名也不存在.这不行. (2认同)