CakePHP2を美味しく食べたい:$autoLayout と $autoRenderでの制御

CakePHP2のhtmlビュー表示制御について

自動レンダリング機能の動きとOFF/ONについて現時点で市販のとあるマニュアル本の書き方がだらしなく(そのうえそれくらいしかないorz)、誤解を招く記述なので自分の整理のためにも書きます。
コントローラのメンバ変数として指定できる$autoLayoutと$autoRender。この$autoLayoutと$autoRenderは画面表示用テンプレート読み込み動作のOFF/ONをつかさどります。初期状態はどちらも”TURE”が指定されていますので’ON’状態です。この二つのメンバ変数を記述しなければ、初期値(ON)で動作することになります。

そのときはどう動くの?

例えば/hoge/でページを表示させるつもりであれば、次のようにコントローラーを作りますね。
/Controller/ディレクトリ直下にHogeController.phpと名前をつけたファイルを作成し、そのファイル内にindex()アクションを記述した場合、
/View/ディレクトリ内に/hoge/ディレクトリを作り、その中にindex.ctpという名前でファイルを配置すれば、そのファイル内に記述した内容が読み込まれます。
さらに
/View/Layouts/ディレクトリ内にあるdefault.ctpファイルが読み込まれます。
そして上記(index.ctp)で読み込んだ内容をdefault.ctp内に記述されている

<?php echo $content_for_layout; ?>

で出力し表示します。もし/View/Layouts/default.ctpが無いとか、/Layouts/ディレクトリがない場合はCakePHPのライブラリ内にあるファイルを読み込んで表示するようになっています。

この挙動を変更したい

レイアウトを使いたくない

コントローラ内に次の1行を加えれば、レイアウト表示をOFFできます。
public $autoLayout = false;
これで、/View/hoge/index.ctpだけが表示されます。

レイアウトを色々と使い分けたい

複数ページを制作しカテゴリ毎に色分けしたレイアウトを複数用意して季節が変わったらレイアウトを変更したいなら、レイアウトファイル名を指定するため$layoutを記述して制御します。
public $layout = 'hoge';
これで/View/Layouts/hoge.ctpを読み込んで来るようになります。
応用編ですが、時間帯で変えたいとかユーザーステータスで変えたいは

public $layout;

 

public function index()
{
$ctp = 'hoge';
if ($hour == 1) $ctp = 'fuga';
if ($hour == 2) $ctp = 'hena';
$this->layout = $;
}

とするといいかもしれません。判断分岐はみなさんのセンスでどうぞ。

そして、
$autoRender = false;
こうすることで、レイアウト用またビュー用テンプレートファイルを読み込んでくる処理を止めることができます。
特殊な用途でこれを止めて、アクション内で何か処理をさせて終わらせる必要がある場合もあるでしょう(画面遷移を振り分けるためだけでリダイレクトさせるとことか)。画面表示の必要が無い場合、この記述を加えてテンプレート読み込みを止めます。