Yii2:如何访问模块内部的模块变量?

时间:2017-04-15 11:42:20

标签: php yii2

我正在创建一个Yii2模块, 在这个模块中,我设置了一个变量upload_path。 现在我尝试使用

从该模块内部的行为中访问此变量
 module = MyModuleClass::getInstance();

我得到null, 访问此变量的唯一方法是设置config:

'modules' => [
    'w_forms' => [
        'class' => 'wardany\dform\DynamicForm',
        'upload_path'=> "@frontend/web/uploads",
        'upload_url'=> "/uploads",
    ],
]

Yii::$app->getModule('w_forms')->upload_path

但我认为这不是很好,因为用户可能会更改ID' w_forms'

3 个答案:

答案 0 :(得分:0)

当然,您将获得null价值。

我认为使用MyModuleClass::getInstance();会创建一个类的新实例,但是yii会在应用程序的开头创建自己的模块实例。

您可以在模块中使用$this->upload_path

并在行为中使用$this->owner->upload_path来访问其父属性。

答案 1 :(得分:0)

一种解决方案是将它们放入您的应用程序Yii::$app->params

<强>优点:

  • 即使尚未实例化模块,您也始终可以访问它们。
  • 您甚至可以从Module的ActiveRecords中访问参数。

<强>缺点:

  • 您需要在参数中使用固定密钥,这样就无法配置单个模块。

答案 2 :(得分:0)

您可以从单个控制器继承所有控制器并将变量添加到父控制器

主控制器:

<?php

namespace frontend\modules\api\controllers;

use yii\web\Controller;

/**
 * Default controller for the `default` module
 */
class DefaultController extends Controller
{
    public $someVar=255;
}

继承控制器:

     namespace frontend\modules\api\controllers;

    class SomeController extends DefaultController 
    {
        public function actionIndex() {
              $someVariable=$this->someVar;
         }
    }