CakePHP2.5.5でビューを使ってみる
前回の続き。
今回はCakePHP1.3.6のこちらのログをCakePHP2.5.5でなぞってビューを使ってみる。
Cakeのルールでは、
- コントローラーのプログラム名(Controllerの前:キャメル記法)で/app/viewsにディレクトリを作成する。ディレクトリ名はキャメル記法になる。そのコントローラーから使うviewは、このディレクトリに入れる。
- コントローラー内のメソッド名と、上記のディレクトリ内にある「メソッド名.ctp」が自動的に紐付けされる。
- 紐付けするには、変数$autoRenderをtrueに設定する。
- レイアウトを適用するには、$autoLayoutをtrueにする。
開発環境としてeclipse_pdtを利用しているので、「.ctp」をPHPエディタで編集するように設定しておく。
eclipseのメニューバーのEclipse=>環境設定(Macのため。WindowsならWindow=>Preference)=>General=>Content Typesで、Text下にあるPHP Content Typeを選択し、*.ctpを追加する。
サンプルの作成
今回のサンプル名(プログラム名)は、TestViewとする。
Cakeの規約に乗っ取り、/app/viewsにディレクトリTestViewを作成する。
コントローラーの作成
/app/controllersにTestViewController.phpを、以下のように作成する。
<?php class TestViewController extends AppController{ public $name = 'TestView'; public $uses = null; public $autoLayout = false; public $autoRender = true; function index(){ } } ?>
ビューの作成
先のログでwebrootに作成したindex.htmlを、/app/views/TestViewにコピーし、index.ctpとリネームする。
これで、index.ctpは、TestViewのindexメソッドと紐付けられる。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>これはテストです。</title> </head> <body> app/View/TestView/index.ctpを表示しています。<br> <br> テスト </body> </html>
これで、localhost/workspace/cake-2.5.5/TestViewにアクセスすると、以下の画面が帰ってくる。
ここで、コントローラーの$autoLayoutをtrueにしてみる。
<?php class TestViewController extends AppController{ public $name = 'TestView'; public $uses = null; public $autoLayout = ture; public $autoRender = true; function index(){ } } ?>
すると、Cakeで用意されているレイアウトが適用されて、以下のような画面が帰ってくる。
エラーが出まくっているが、とりあえず今のところ大丈夫の模様。
Viewはメソッドごとに作成するので、先のコードにindex2()を追加する。
index2ではメンバー変数$autoLayoutをfalseにする。
<?php class TestViewController extends AppController{ public $name = 'TestView'; public $uses = null; public $autoLayout = true; public $autoRender = true; function index(){ } function index2(){ $this->autoLayout=false; } } ?>
/app/views/に、以下のindex2.ctpを作成する。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>This is Test Page</title> </head> <body> Displaying "app/View/TestView/index2.ctp".<br> <br> Testing... </body> </html>
ここで、/localhost/workspace/samplecake/index2にアクセスすると、以下の画面が帰り、もくろみ通りレイアウトが適用されない。Dispatcherのエラーが気になる。。。