ViewHelperはHTML表示や数値表現、日付判定などviewで役立つコンポーネントです。controllerで使用するHelperを指定しておくとフレームワークにてインスタンス化され、view内で使用できるようになります。ViewHelperには以下のようなものがあります。
- [cake/libs/view/helpers]
- AjaxHelper [ajax.php]
- CacheHelper [cache.php]
- FormHelper [form.php]
- HtmlHelper [html.php]
- JavascriptHelper [javascript.php]
- NumberHelper [number.php]
- SessionHelper [session.php]
- NumberHelper [number.php]
- TextHelper [text.php]
- TimeHelper [time.php]
デフォルトではHtmlHelperが有効になっています。
ViewHelperを指定する
controllerの$helpersに使用するHelper名を配列で渡します。Helper名はクラス名をそのまま指定するのではなく、HogeHelperのHogeの部分を小文字にして指定します。(HogeHelperならhoge)ちなみにこの指定方法はHelper以外でもCompenent、Modelなどでも使うで覚えておくとおいしいケーキが焼けます。:)
[app/controller/sample_controller.php]
< ?php
class SampleController extends Controller {
// HtmlHelper,TimeHelper
var $helpers = array('html', 'time');
}
?>
ViewHelperを使用する
viewでは$hogeでHogeHelperインスタンスが使用できます。(HtmlHelperなら$html、TimeHelperなら$time)
[app/view/sample/index.thtml]
<!-- 日付判定:更新時間が1週間以内ならNew!!を表示 -->
<?php if (!$time->wasWithinLast("1 weeks", $sample['modified'])) { ?>
<strong>New!!</strong>
<?php } ?>
<!-- フォームタグ -->
<?php echo $html->formTag() ?>
<p>< ?php echo $html->submit('投 稿') ?></p>
>>
ViewHelperは自作する事もできます。
ViewHelperを作成する
自作ViewHelperは以下を満たすように作成します。
- クラス名を[%Helper名% + Helper]にする
- Helperクラスを継承する
- ファイル名を[%helper名% + .php]にし、[app/views/helpers]に配置する。
%helper名%はクラス名の%Helper名%を小文字に変換し、単語の区切りを[_]でつなげます。(FooBarHelperならfoo_bar)
[app/views/helpers/hello.php]
<?php
class HelloHelper extends Helper {
function hello($name) {
return $this->output(sprintf("Hello, %s", $name));
}
}
?>
あとはcontrollerの$helpersに’hello’を加えれば、viewで$hello->hello()が使用できます。
>>
■参考サイト
http://manual.cakephp.org/chapter/helpers
- Newer: 「GTD ひたすらリストを書き出す会 in 関西」
- Older: PHP 5 Power Programming
トラックバック:1
- このエントリーのトラックバックURL
- /blog/2006/08/cakephp_viewhelper.html/trackback
- Listed below are links to weblogs that reference
- CakePHP ViewHelperの使い方 from Shin x blog
- pingback from お気に入り 役立つ | Web平犯科帳 12-10-19 (金) 18:06
-
[…] http://www.1×1.jp/blog/2006/08/cakephp_viewhelper.html […]

