2012-04-25 22 views
3

グリッドビューがあり、別のアクションコントローラから列の値を取得したいと考えています。で は、今私は1他のコントローラの呼び出しアクション

array(
     'name'=>'title', 
     'value'=>array($this,'Action2'), 
    ), 

コントローラでこれを持っていると私は、このエラーを取得:

controller1 and its behaviors do not have a method or closure named "Action2". 

私は "コントローラ2"

array(
     'name'=>'title', 
     'value'=>array('controller2','Action2'), 
    ), 

で$これを交換する場合、私はこのエラーを取得

call_user_func_array() [<a href='function.call-user-func-array'>function.call-user-func-array</a>]: First argument is expected to be a valid callback, 'controller2::action2' was given 

mayこれは悪い習慣ですが、これは実現可能ですか?

答えて

5

コントローラの操作をこのように使用することは悪い習慣です。モデルのメソッドにコードを配置する方が良い。

ここ
'value' => function() { 
    list($controller) = Yii::app()->createController('controllerId'); 
    return $controller->actionTest(); 
} 

は別です:あなたはまだこれをしたいなら、ここに一つの方法です私はそれをテストしたが、私が手

Yii::app()->runController('category/view/id/1'); 
+0

:あなたはこのソリューションを使用することができます

'value' => function() { $controller = new TestController('test'); return $controller->actionTest(); } 
shayan

+0

サーバーエラーとは何ですか?あなたの行動に何か間違いがあるかもしれませんか?あなたのコントローラはモジュール内にありますか?あなたの状況をより良く理解できるように、より多くの情報を提供してください。また、htmlの一部をレンダリングするためだけにコントローラの操作が必要な場合は、partialsを使用することもできます。 –

+0

solved.iコンポーネントを使用して 'value' => array($ this、 'Action2')を 'class' => 'ComponentClassName'と置き換えてください – shayan

3

500台の内部サーバーerror.iはhtml/swfであるモデルbeacauseにそれを置かなかった。コントローラをコンポーネントとして公開したいのであれば、より良い解決策かもしれません。どのように 'value' => array($ this、 'Action2')の値を変更するのですか?
関連する問題