php5.3.3+CakePHP1.3.6のビューの基礎
今回は、CakePHPのビューの覚え書き。
Cakeのルールでは、
- コントローラーのプログラム名(_controllerの前)で/app/viewsにディレクトリを作成する。ディレクトリ名はキャメル記法になる。そのコントローラーから使うviewは、このディレクトリに入れる。
- コントローラー内のメソッド名と、上記のディレクトリ内にある「メソッド名.ctp」が自動的に紐付けされる。
- 紐付けするには、変数$autoRenderをtrueに設定する。
- レイアウトを適用するには、$autoLayoutをtrueにする。
開発環境としてeclipse_pdtを利用しているので、「.ctp」をPHPエディタで編集するように設定しておく。
eclipse(helios)のメニューバーのWindow=>Preferences=>General=>Content Typesで、Text下にあるPHP Content Typeを選択し、*.ctpを追加する。
サンプルの作成
今回のサンプル名(プログラム名)は、TestViewとする。
Cakeの規約に乗っ取り、/app/viewsに、これをアンダースコア記法で表現したディレクトリ、test_viewを作成する。
コントローラーの作成
/app/controllersにtest_view_controllers.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/test_viewにコピーし、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>CakePHPのサンプル</title> </head> <body> これはCakePHPのサンプル画面です。 </body> </html>
これで、localhost/workspace/cakesample/TestViewにアクセスすると、以下の画面が帰ってくる。
ここで、コントローラーの$autoLayoutをtrueにしてみる。
<?php class TestViewController extends AppController{ public $name = 'TestView'; public $uses = null; public $autoLayout = true; public $autoRender = true; function index(){ } } ?>
すると、Cakeで用意されているレイアウトが適用されて、以下のような画面が帰ってくる。
そこで以下のようなコードを書いてみる。
<?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>Sample</title> </head> <body> This is a test screen of CakePHP. </body> </html>
ここで、/localhost/workspace/samplecake/index2にアクセスすると、以下の画面が帰り、レイアウトが適用されないことが分かる。