2009年3月16日月曜日

AppController::beforeRender を活用して CakePHP のコントローラ属性をアサインする

2009年3月16日月曜日
これは好みの問題かもしれませんが、Kyo は、 ビューに渡すためのコントローラ属性を、CakePHP のコントローラー内でその都度セットするのが苦痛に感じます。なので、こんな方法をいつもとっています。 Add a $this->set into the AppController::beforeRender to always read $this->data.
class AppController extends Controller {
  function beforeRender() {
    if (!isset($this->viewVars['data'])) {
      $this->set('data', $this->data);
    }
  }
}
コントローラ(app controller を継承したコントローラ)で、 もう $this->data をセットする必要はありません。
class PostsController extends AppController {
  function index() {
    $this->data = $this->paginate();
  }
}
同様に次のようにもできます。
function beforeRender() {
  if (!isset($this->viewVars['data'])) {
    $this->set('data', $this->data);
  }
  if (!isset($this->viewVars['modelClass'])) {
    $this->set('modelClass', $this->modelClass);
  }
}
これで、どのビューからでも $data と $modelClass という変数でアクセスできるようになりました。
<? if($data): ?>
<? pr($data)?>
<? endif; ?>

<? if($modelClass): ?>
<? pr($modelClass)?>
<? endif; ?>

0 コメント:

コメントを投稿

 
JamNite Japan ◄Design by Pocket, BlogBulk Blogger Templates