CMS構築を目的にPHPをベースとしたWordPress、CakePHPやPEARなどオープンソースを中心に解説しています

例えば、CDショップのサイトをCakePHPで構築するとして、ロック音楽のパスを「/cd/rock/」、ポップ音楽のパスを「/cd/pop/」としたと仮定します。

CakePHPのコントローラの基本的なルールでは、「/cd/rock/」にアクセスがあった場合に、コントローラ「CdController」のメソッド「rock」で処理が行われ、ビュー「/app/views/cd/rock.ctp」で表示されます。
同じくして、「/cd/pop/」にアクセスがあった場合に、コントローラ「CdController」のメソッド「pop」で処理が行われ、ビュー「/app/views/cd/pop.ctp」で表示されます。

ここでコントローラの処理についていうと、ジャンルは違えど処理はほとんど同じのはずです。処理を共通化したい場合には、コンポーネントを活用すればよいことは以前書きました。
CakePHPでコンポーネントを作成する

ビューについても、共通部分についてはエレメントでまとめることが可能です。
CakePHPでビューからエレメントを呼び出す

さて、コントローラのつくりをうまく工夫すれば、ビューをまったく同じ構造にすることができます。つまり、「rock.ctp」と「pop.ctp」の内容がまったく同じなわけです。たとえこれをエレメントで共通化したとしても、100のジャンルが存在するとなると、ビューファイル「/app/views/cd/xxx.ctp」が100ファイル存在することになります。
あまり気持ちがよいものではありませんね。

そこで、ビューを呼び出すルールを意図的に操作して、同じビューファイルを参照するようにコントローラに記述してあげます。この時に使用する関数が「render()」です。

class CdController extends AppController {

	function rock(){

		/* 処理 */

		$this->render('/common/category');
	}

	function pop(){

		/* 処理 */

		$this->render('/common/category');
	}

	function jazz(){

		/* 処理 */

		$this->render('/common/category');
	}

	...

このようにrender関数でビュー「/app/views/common/category.ctp」を参照するように指定してあげれば、いくつアクションがあったとしても、ビューファイルは1つ用意するだけでよいのです。

管理がだいぶすっきりしますね。

render関数の公式マニュアルです。
ビューとの連携 :: コントローラのメソッド :: コントローラ :: CakePHPによる開発 :: マニュアル :: 1.3コレクション :: The Cookbook

このエントリーをはてなブックマークに追加

Comment

Comment Form

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Monthly Archives

Search