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

Moh*_*ali 6 params yii2 yii2-advanced-app

我想Global Params在Yii2中配置.

例如:

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

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

  1. 这将存储指向服务器位置的Url以进行文件上载.

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

当我设置这样的params时:

'uploadPath' => Yii::$app->basePath . '/uploads/',
'uploadUrl' => Yii::$app->urlManager->baseUrl . '/uploads/',
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

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

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

'uploadPath' => Yii::getAlias('@common') . '/uploads/',
Run Code Online (Sandbox Code Playgroud)

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

aro*_*hev 8

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

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

要使用应用程序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/';
    }     
}
Run Code Online (Sandbox Code Playgroud)

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

'bootstrap' => [
    ...
    'app\components\Bootstrap',
];
Run Code Online (Sandbox Code Playgroud)

  • 嗨,我尝试了解决方案.它工作得很好.两个小的变化:1.添加使用yii\base\BootstrapInterface; 2.在params定义之后需要使用分号而不是逗号.非常感谢. (2认同)