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メソッドで任意のビューを指定できる。
1 2 3 4 5 6 7 |
class PostsController extends AppController { .... public function admin_preview($post_id) { .... $this->render('view'); } } |
参考サイト
コントローラ — CakePHP Cookbook 2.x ドキュメント
http://book.cakephp.org/2.0/ja/controllers.html
Controller::render(string $view, string $layout)の説明を参照。