CakephpのControllerの備忘録
データベーステーブルを作らずにコントローラーを作成する
コントローラーオブジェクトを生成する際には、同時にモデルオブジェクトも生成されます。
そのモデルオブジェクトはデータベースに同名のテーブルを必要とするので、同名のテーブルを作成していない場合エラーが吐かれます。
このエラーは、コントローラーの "uses" プロパティを null にセットしておくことで回避できます。
<?php class PostsController extends AppController { public $name = 'Posts'; public $uses = null; }
任意のレイアウトファイルを使う
cakephpをダウンロードしてきた状態では、用意されているレイアウトファイルが使用されます。
また、”APP/views/layouts/default.ctp” を作成すると、特に指定しない場合にはこれが使用されます。
任意のレイアウトファイルを使用したい場合には、コントローラーの "layout" プロパティを設定します。
<?php class PostsController extends AppController { public $name = 'Posts'; public $uses = null; public $layout = 'mylayout'; # => APP/views/layouts/mylayout.ctp }
ちなみに、"default.ctp" の中には、
<?php echo $content_for_layout; ?>
が必要です。"$content_for_layout" は cakephp によって自動的にセットされます。その内容に関しては次項に記述します。
Controller::render() に関して
Controller::render() は Controller::$autoRender が true のとき、各アクションの処理が終了した後に呼ばれるメソッドです。
特に何もしていない場合、"APP/views/{CONTROLLER_NAME}/{ACTION_NAME}.ctp" が読み込まれます。
任意のビューを使いたい場合には以下のようにします。
<?php class PostsController extends AppController { public $name = 'Posts'; public $uses = null; public $layout = 'mylayout'; // $this->autoRender = true のとき、 // アクションの処理が終わってから呼び出される public function render() { return parent::render('/posts/default'); # => APP/views/posts/default.ctp が使われる } }
また、特定のアクションでは別のビューを使いたいというときには、以下のようにします。
<?php class PostsController extends AppController { public $name = 'Posts'; public $uses = null; public $layout = 'mylayout'; public function render() { return parent::render('/posts/default'); } public function hoge() { $this->set('hoge', 'fuga'); parent::render('/posts/hoge'); # => APP/views/posts/hoge.ctp が使われる } }
デフォルトの "default.ctp" の置き場所
"APP/views/layouts/default.ctp" を作成する前は、元々用意されているレイアウトファイルが使われる。
使われるファイルは "CAKE/libs/view/layouts/default.ctp" にある。
また、"home.ctp" は "CAKE/libs/view/pages/home.ctp" にある。
これら二つの内容は参考になるので、みておくと良いかもしれません。