ログイン状態によって読み込むレイアウトファイルを切り替えたいなーと思ってぐぐったが
$this->render(null,'hoge',null);
というドキュメントにある事しか出てこなくてこれをアクション毎に設定するのはだるいなーと思っていた。
しかしぐぐっても出てこないときはソースを見る。
grepした結果、renderメソッドは cake/libs/view/view.php 内で定義されている様だ。
# cake/libs/view/view.php
var $layout = 'default';
function render($action = null, $layout = null, $file = null) {
# 省略
if ($layout === null) {
$layout = $this->layout;
}
layout のデフォルト値を自分で指定してやれば動くんじゃねーか?
と思って コントローラの beforeFilter に以下の様に書いたら望みどおりの動きをした。よかったよかった。
function beforeFilter() {
$this->set('auth_user',$this->Auth->user());
Security::setHash('sha1');
$this->Auth->allow('index','view','user');
if ($this->Auth->user()) {
$this->layout = 'user';
} else {
$this->layout = 'default';
}
}
Sponsored Link