php5.3.3+CakePHP1.3.6のビューの基礎

今回は、CakePHPのビューの覚え書き。
Cakeのルールでは、

  • コントローラーのプログラム名(_controllerの前)で/app/viewsにディレクトリを作成する。ディレクトリ名はキャメル記法になる。そのコントローラーから使うviewは、このディレクトリに入れる。
  • コントローラー内のメソッド名と、上記のディレクトリ内にある「メソッド名.ctp」が自動的に紐付けされる。
  • 紐付けするには、変数$autoRenderをtrueに設定する。
  • レイアウトを適用するには、$autoLayoutをtrueにする。

開発環境としてeclipse_pdtを利用しているので、「.ctp」をPHPエディタで編集するように設定しておく。
eclipsehelios)のメニューバーの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にアクセスすると、以下の画面が帰り、レイアウトが適用されないことが分かる。