我正在创建一个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'
答案 0 :(得分:0)
当然,您将获得null
价值。
我认为使用MyModuleClass::getInstance();
会创建一个类的新实例,但是yii会在应用程序的开头创建自己的模块实例。
您可以在模块中使用$this->upload_path
。
并在行为中使用$this->owner->upload_path
来访问其父属性。
答案 1 :(得分:0)
一种解决方案是将它们放入您的应用程序Yii::$app->params
。
<强>优点:强>
<强>缺点:强>
答案 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;
}
}