假设您要查询的模型在您的模块中,则有 3 种解决方法。
一
您可以做的是在QuickDialModule.php文件中定义您的renderPageLinks()
函数,即在QuickDialModule 类中。然后你可以像这样使用它:
Yii::app()->getModule('QuickDial')->renderPageLinks();
您必须在 QuickDialModule 类中编写此函数:
Class QuickDialModule extends CWebModule{
public function init(){
// ... code ...
}
// ... code ... other functions
public function renderPageLinks(){
// ... do whatever you were doing inside the function ...
}
}
编辑:
仅当应用程序接收到用户的 url 请求时,yii 才会实例化控制器。
二
您可以通过声明您的函数来解决另一个问题static
。但是你必须将具有函数的类的 php 文件导入到 main.php配置文件中的 yii 自动加载数组中。因此,将您的 defaultcontroller renderPageLinks() 函数更改为静态:
public static function renderPageLinks(){
// do whatever you were doing
}
通过修改protected/config/ 文件夹中的主配置main.php来自动加载控制器:
// autoloading model and component classes
'import'=>array(
'application.models.*',
'application.components.*',
'application.modules.quickdial.controllers.*' // this line is added
),
然后直接调用你的静态函数:
$this->widget('pageLinkGen', array('pages' => DefaultController::renderPageLinks()));
当然,要使这种静态方法起作用,您必须只有一个带有控制器 DefaultController 的模块,或者您不能导入其他模块的控制器,否则可能会出现名称冲突。
三
如果你把函数移动到主模块中的控制器中(即你提到的 pageLinkGen 控制器),那么你必须将你需要的模型导入到主模块的配置 main.php 中(以便 yii 可以找到它) , 自动加载导入数组添加:
// autoloading model and component classes
'import'=>array(
'application.models.*',
'application.components.*',
'application.modules.quickdial.models.*' // this line is added
),
以便您的控制器可以找到模型。