クエリしているモデルがモジュール内にあると仮定すると、3 つの回避策があります。
1
できることは、 QuickDialModule.phpファイル、つまりQuickDialModule クラス内で関数を定義することです。次に、次のように使用できます。renderPageLinks()
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 によってインスタンス化されます。
二
function を宣言することで、別の回避策がありますstatic
。しかし、次に、 function を持つクラスを持つ php ファイルを、main.php 構成ファイルの yii autoloading 配列にインポートする必要があります。したがって、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 を持つモジュールを 1 つだけ持つ必要があります。または、他のモジュールのコントローラーをインポートしてはなりません。いずれにしても、名前の競合が発生する可能性があります。
三
関数をメイン モジュールのコントローラ (つまり、前述の pageLinkGen コントローラ) に移動する場合は、必要なモデルをメイン モジュールの構成 main.php にインポートする必要があります (yii がそれを見つけられるようにするため)。 、インポート配列の自動ロードに次を追加します。
// autoloading model and component classes
'import'=>array(
'application.models.*',
'application.components.*',
'application.modules.quickdial.models.*' // this line is added
),
コントローラーがモデルを見つけられるようにします。