2016-07-26 10 views
1

モデルの一部のデータをレイアウトに反映させたいのですが。しかし、メソッドのレンダリングは、構造化されたデータのみをビューファイルに渡しますが、レイアウトファイルは渡されたレンダリングビューを取得します。CControllerYii 1.1レイアウトファイルからモデルのデータを表示するにはどうすればいいですか?

したがって、モデルのレイアウト表示データをどのようにしたらよいですか?

2つの可能性が頭に浮かぶ:

  1. は、ビューから手動でレイアウトロジックを模倣し、Yiiののレイアウトファイル無操作を行います。

  2. オーバーライドCControllerそのサブクラスで方法をレンダリングします。

私はいずれかの亜種に満足していないので、誰かがそれを行う方法についてよりクリーンなアイデアを持っていますか?

答えて

0

もう一つの方法は、あなたのコントローラクラスにパブリック変数を定義することで、何かのように:その値はその後、レイアウト内でアクセスすることができます

class MyController extends Controller { 
    public $test = 'foo'; 
    .... 

echo $this->test; 

とアクションで操作:

public function actionMyaction(){ 
    $this->test = "bar"; 
    ... 

明らかに、必要な変数が多い場合は理想的ではありませんレイアウトで。 1つの解決策は、一連のパラメータを使用することです。あるいは、レイアウトを最小限にしてCWidgetを使用して、ビュー内で使用するための再利用可能なコンポーネントを作成することもできます。

たとえば、メインナビゲーションのコードをすべてのビューに重複させたくないのは明らかです。レイアウトには明らかな解決策がありますが、データを扱うのが不便な場合は、各ビュー内のナビゲーションをレンダリングするウィジェットのインスタンス(そして、CWidgetクラスにデータを渡すことができます):

$this->widget("MainNavigation",array("params"=>$params)); 
関連する問題