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コーダの分業という目的は破綻してしまいます。
作業の切り分けという面でいうと、テンプレートの切り離しというよりは、もっと別のところにあるような気がするんですけどね。
コメントする