Hatena::ブログ(Diary)

放浪するエンジニアの覚え書き このページをアンテナに追加 RSSフィード

2014-10-24

CakePHP2.5.5でビューを使ってみる

| 18:26 | 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を追加する。

f:id:tetsuya_odaka:20141020163238p:image


サンプルの作成

今回のサンプル名(プログラム名)は、TestViewとする。

Cakeの規約に乗っ取り、/app/viewsにディレクトリTestViewを作成する。

f:id:tetsuya_odaka:20141020163618p:image

コントローラーの作成

/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にアクセスすると、以下の画面が帰ってくる。

f:id:tetsuya_odaka:20141020164903p:image

ここで、コントローラーの$autoLayoutをtrueにしてみる。

<?php
class TestViewController extends AppController{
	public $name = 'TestView';
	public $uses = null;
	public $autoLayout = ture;
	public $autoRender = true;

	function index(){
	}
}
?>

すると、Cakeで用意されているレイアウトが適用されて、以下のような画面が帰ってくる。

エラーが出まくっているが、とりあえず今のところ大丈夫の模様。

f:id:tetsuya_odaka:20141020165153p:image


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のエラーが気になる。。。

f:id:tetsuya_odaka:20141020165948p:image