概要
CakePHP2.0ではAliasを使って既存のクラスを拡張しやすくなりました。
今までは、HtmlHelperクラスを継承してMyHtmlHelperクラスをつくると、利用するときには
$this->MyHtml->input();
のように書かなくてはいけなかったので、既存のコードに反映させるには、該当箇所をすべて修正しなければいけませんでした。
2.0では、
$helpers = array(‘Html’ => array(‘className’ => ‘MyHtml));
と書いておけば、既存のコードはそのままで(i.e. $this->Html->input())、拡張したクラスを利用することができます。
例として、TwitterBootstrapを利用した時のコードを紹介します。
因みにCakePHP1.3では、HuckPluginを使えば同じようなことが可能です。
準備
参考
Helperの作成
今回はFormHelperとSessionHelperを継承してそれぞれ、BootstrapFormHelperとBootstrapSessionHelperを作成します。
CakePHP2での変更点
- SessionHelperのflashメソッドは引数が増えて、オプションとしてelementを指定することができるようになっています。
- Helperのコンストラクタの引数が変わっています。
Viewの中を変更するよりは、Helper内で変更できるところは変更すれば、既存のViewの変更の量を少なくできるし、追加の変更も楽になると思います。
上のコードは足りない部分もたくさんあると思いますが、参考までに。。あとはこれらをPlugin化しておけば、使い回しができます。
すでに、Plugin化されたものやBake用のスケルトンを作っていらっしゃる方がいるので最後にgithubのURLを載せておきます。
Controllerの修正
Controller内の$helpersを以下のようにします。
public $helpers = array(‘Form’ => array(‘className’ => ‘BootstrapForm’), ‘Session’ => array(‘className’ => ‘BootstrapSession’));