2015-06-26 170 views
0

我创建了一个工作得很好的模块。从模块中的控制器和视图中,我想要访问我创建的称为t的模块的静态转换方法。 根据Yii's documentation我应该能够访问模块类(名为模块)的Module::t()的静态方法,但我只有在我预先安装名称空间(如\app\modules\commission\Module::t())时才能使用。Yii2:从模块中调用模块类的静态方法

这是一个配置问题,我错过了,不得不修改,或者这是使用命名空间访问模块类的唯一方法?我搜索了互联网,但无法找到类似的问题。

+1

写在文件 '使用\程序\模块\佣金\模块的顶部;' 比你可以用'模块:: T()'直接 – mohit

+0

@mohit,我已经做到了,它的工作原理好,thanx。但我希望这不是必要的。如果我想稍后切换到'\ backend \ modules \ ...'或'\ console \ modules \ ...',我必须使用静态函数更改模块中的所有对象。 – Barry

回答

0

你可以尝试使用aliases和配置参数定义别名为模块别名

'aliases' => [ 
    '@mymodule' => 'app\modules\commission\Module', 
], 

,然后打电话给你的方法是这样的:

call_user_func([Yii::getAlias('@mymodule'), 't', $params]);

不那么优雅作为Module::t(),但给你灵活地改变你的模块类,实现你的自定义t()方法

+0

感谢您的回答。事实上,它并不那么优雅,并且它与使用'\ Yii :: $ app-> getModule('commission'):: t()' – Barry

+0

'的文档中描述的方法大致相同,您可以添加自己的另一个选项class autoloader,因为yii2依靠psr-4自动加载标准,所以你必须使用'use \ app \ modules \ commission \ Module'来加载你的类 – Tony