Yii 2基礎ノート(四):レイアウトファイルを深く理解する


レイアウトファイル:views/layouts/main.phpは主にページ表示のヘッダ(ナビゲーションバー)、テール(footer)を含む
一、カスタムレイアウトファイルの使用:1コントロールのactionに追加する:
$this->layout = '       ';//    php   
   action           。

②すべてのactionに同じレイアウトファイルを使用させる:controllerに直接属性を追加する:
public $layout = '       ’;//    php   

またはcontroller初期化メソッドで定義します.
public function init(){
     parent::init();
     $this->layout  ='main';
}

③定義しない場合は、デフォルトのレイアウトファイルを使用します.検索順は、現在のコントローラでレイアウト変数が定義されているかどうかを確認します.ある場合はそのまま使用します.そうしないと、Moduleモデルで定義されているレイアウト変数が検索されます.まだない場合は、moduleを変更する親Moduleで定義されたレイアウト変数が検索されます.
④layout変数の空の値:a.false、レイアウトファイルを使用しない;b.null、現在のmoduleモジュールのレイアウトファイルを使用する.
⑤layout変数の値:viewファイルの検索と類似a.‘main’//直接文字列で、現在のmoduleのレイアウトファイルb.@app/views/layouts/mainを表す.php//別名c.'/main'//スラッシュは現在のappの下のレイアウトファイルを表します
レイアウトファイルは、現在testがあるなど、階層的にネストすることができる.phpのレイアウトファイルの書き方は:
    <?php $this->beginContent('@app/views/layouts/main.php',['       ' =>    ]);?>
      <div>......</div>
      <?php echo $content ?>

    <?php $this->endContent(); ?>

その作業過程は、viewファイルrenderから生成されたcontent変数であり、まずこのtestである.phpでレンダリングする、レンダリングの結果はまた新しいcontentとして現在のappの下のmainとする.phpレイアウトファイルでレンダリング;
二、レイアウトのより高度な使い方:yii 2デフォルトでは、renderが指定したviewファイルで生成された$contentという名前の変数しかレイアウトファイルに受信できません.ビューファイルに次のコードを書くことで、レイアウトファイルのレンダリングに複数の変数を渡すことができます.
    <?php $this->blocks['content'] = ''; $this->blocks['other'] = ''; ?>

    <?php InhritLayout::begin(['viewFile' => '@app/views/layouts/main.php']); ?>    
        <?php $this->beginBlock('contetn');?>
                      content       
        <?php $this->endBlock(); ?>

        <?php $this->beginBlock('other');?>
                                 
        <?php $this->endBlock(); ?> 
    <?php InhritLayout::end(); ?>

最後に、レイアウトファイルで、を取得します.詳細:http://github.com/yiifans/lulucms/blob/master/components/widgets/InhriLayout.php