[CakePHP] デフォルトの名前でないビューを指定する

CakePHPは「設定よりも規約(convention over configuration)」の考え方に従っているけど、時には規約から外れた実装のほうが効率が良い場合もある。実際にそういうケースがあったので覚え書き。

想定

ブログのようなウェブアプリ。

ビジターには記事(Post)の一覧(index)と詳細(view)を表示する。

PostsController

  • index
  • view($post_id)

管理者(admin)には管理者向けの記事一覧(admin_index)とCRUDの基本機能を用意する。

PostsController

  • admin_index
  • admin_add
  • admin_view($post_id)
  • admin_edit($post_id)
  • admin_delete($post_id)

さらに管理者には、ビジターに見える体裁での記事のプレビュー表示をしたい。

PostsController

  • admin_preview($post_id)

「ビジターに見える体裁」なので、独自にビューを定義せずにPosts/view.ctpを流用したい。そうしておけば、将来ビューの体裁が変わったときに編集しなければいけないビューはPost/view.ctpの1つで済む。

実装

デフォルトの名前でないビューを指定するにはどうするか、調べてみると簡単だった。コントローラのメソッドから復帰する前にrenderメソッドで任意のビューを指定できる。

参考サイト

コントローラ — CakePHP Cookbook 2.x ドキュメント
http://book.cakephp.org/2.0/ja/controllers.html
Controller::render(string $view, string $layout)の説明を参照。