Предполагая, что запрашиваемая модель находится внутри вашего модуля, есть 3 обходных пути.
Один
Что вы можете сделать, это определить ваш renderPageLinks()
функция в файле QuickDialModule.php , т.е. внутри класса 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 ...
}
}
Редактировать :Контроллеры создаются yii только тогда, когда приложение получает URL-запросы от пользователя.
Два
У вас есть еще одно решение, объявив свою функцию static
.Но тогда вам нужно будет импортировать файл php, который имеет класс с функцией , в массив автозагрузки yii в файле main.php config .Поэтому измените функцию renderPageLinks () defaultcontroller на static:
public static function renderPageLinks(){
// do whatever you were doing
}
Автозагрузите контроллер, изменив основную конфигурацию main.php в защищенной папке / config /:
// 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
),
, чтобы ваш контроллер мог найти модель.