如何在Yii2中配置全局uploadPath和uploadUrl?

时间:2015-03-30 11:29:30

标签: yii2 params yii2-advanced-app

我想在Yii2中配置Global Params

例如:

  1. 这将存储所有文件上传的服务器路径。
  2.   

    Yii :: $ app-> params ['uploadPath'] = Yii :: $ app-> basePath。 '/上传/';

    1. 这将存储指向服务器位置的Url,以便上传文件。
    2.   

      Yii :: $ app-> params ['uploadUrl'] = Yii :: $ app-> urlManager-> baseUrl。 '/上传/';

      当我设置这样的参数时:

      'uploadPath' => Yii::$app->basePath . '/uploads/',
      'uploadUrl' => Yii::$app->urlManager->baseUrl . '/uploads/',
      

      我收到此错误:

        

      注意:尝试获取非对象的属性

      我为uploadPath及其工作做了这个:

      'uploadPath' => Yii::getAlias('@common') . '/uploads/',
      

      但我无法获取uploadUrl并打印图像。请帮忙,我将如何在params中设置全局uploadUrl。

1 个答案:

答案 0 :(得分:8)

实际上,在应用配置时,应用程序对象Yii::$app不存在。确切地说,它是从该配置创建的,然后将运行。

因此,您无法通过配置设置这些参数,并且应该在其他位置执行此操作,例如在应用程序引导期间。

使用应用程序boostrap实现此目的:

1)创建自定义类,假设名为app\components\Bootstrap

namespace app\components;

use yii\base\BootstrapInterface;

class Bootstrap implements BootstrapInterface
{
    public function bootstrap($app)
    {
        // Here you can refer to Application object through $app variable
        $app->params['uploadPath'] = $app->basePath . '/uploads/';
        $app->params['uploadUrl'] => $app->urlManager->baseUrl . '/uploads/';
    }     
}

2)将其包含在应用程序配置的boostrap部分中:

'bootstrap' => [
    ...
    'app\components\Bootstrap',
];