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

CakePHP1.3でヘルパーを使ってみます。
ヘルパーはビュー上でめんどくさいhtmlコーディングやjsのコードを自動的に出力してくれます。

いくつか既存で組込みヘルパーが用意されていますが、例えば、HtmlHelperのimageをビューで呼び出してみます。

echo $html->image('/images/sample.jpg');

これにブラウザアクセスすると、該当箇所に以下のコードが自動で埋め込まれます。

<img src="/images/sample.jpg" alt="" />

ちなみに、HtmlHelperはビュー上でデフォルトで使用可能ですが、他のヘルパーはコントローラで明示的に使用することを宣言しなければいけません。FormHelperを使うためには以下のようにします。

class TestController extends AppController {

	public $name = "Test";
	public $helpers = array('Form');

	function index(){
		/* 省略 */
	}
}


続けて、ヘルパーの自作です。
例えば、TestHelperを作成する場合に「/app/views/helpers/test.php」を用意し、以下のようにプログラミングします。

class TestHelper extends Helper {
	public $helpers = array('Html');
	function getPImage($url) {
		$html = "<p>" . $this->Html->image($url) . "</p>";
		return $this->output($html);
	}
}

ちなみに、このようにしてヘルパー内で別のヘルパーを利用することができます。pタグで囲うヘルパーもあるので、意味のないサンプルなのですが、理解しやすいように。。。
また、ヘルパー内ではHtmlHelperを含め全てのヘルパーは宣言しなければ使用できません。

この自作のヘルパーを利用するにあたってコントローラで宣言します。

class TestController extends AppController {

	public $name = "Test";
	public $helpers = array('Test');

	function index(){
		/* 省略 */
	}
}

これをビューでコールします。

echo $test->getPImage('/images/sample.jpg');

ブラウザで確認すると以下の通りです。

<p><img src="/images/sample.jpg" alt="" /></p>

いつもこの手のしくみには疑問を持ってしまうのですが。

確かに、フレームワークのしくみをよく理解した上で活用できれば、コーディングの手間が省けると思います。しかし、複数の人で分散開発すると、大抵の場合、コードがめちゃくちゃになりますよね。
また、ヘルパーやテンプレートエンジンを多様し、すばらしく効率化を図ったところで、プログラミングの知識のないコーダーにとっては、間違いなく手のつけられないものになりますよね。プログラマとhtmlコーダの分業という目的は破綻してしまいます。

作業の切り分けという面でいうと、テンプレートの切り離しというよりは、もっと別のところにあるような気がするんですけどね。

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

Comment

Comment Form

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

Monthly Archives

Search