【メモ】CakePHP 2系 でHtmlHelperを継承してオーバーライドする方法
こないだ風邪を引いたら上も下もやられました。今までの人生で一番キツかったです。。w
どうもおはようございます、こんにちわ、こんばんわ。
阿部です。
久々のブログになります。かなりサボってました。
気づけば今年も終わりですね。いかがお過ごしですか?
ここのところCakePHPでの業務が多いです
早速ですが今回は、本ブログの記事としては初めてのCakePHPについて書こうかと思います。
ここ数ヶ月、会社では上司に色々教わりながらCakePHPでの開発が多いのです。
そんな中、最近CakePHPのバージョン2系が安定版がリリースされて、会社で使ってみようということになりました。
まだまだ使い始めたばかりですが、メジャーバージョンアップ(?)ということだけあって、変更点が多いです。
公式の移行ガイド載せておきますのでもしよかったらご覧下さい。
- CakePHP 1.3からの2.0 移行ガイド
http://book.cakephp.org/2.0/ja/appendices/2-0-migration-guide.html
CakePHP2系でハマる。。
そして今回、2系での開発の中で表題の件のHtmlHelper継承が上手く出来なくってハマりました。。
(やっと本題に入りますw)
- 従来のCake(1.3)でのHtmlHelperの継承方法
/** * app/view/helper/my.php * (大本の自作ヘルパー) */ class MyHelper extends Helper { function fuga($str) { // 自作htmlヘルパーのインスタンス作る $this->Html= new MyHtmlHelper(); return $this->Html->hoge($str); } } /** * app/view/helper/my_html.php * (HtmlHelperを継承した自作htmlヘルパー) */ class MyHtmlHelper extends HtmlHelper { function hoge($str) { return $str; } } /** * app/view/hoge/index.php * View(自作ヘルパー呼び出し) */ <?php echo $my->fuga('test'); ?>
ってな感じだったかと思います。
(実際に試してないので動かないかも、、)
- これと同じようなことを2系試してみると、、
//Argument 1 passed to HtmlHelper::__construct() must be an instance of View, none given, called in ...... /app/View/Helper/MyHelper.php on line 9 and defined
なんじゃこりゃーーーー。
HtmlHelperのコンストラクタにはViewクラスのインスタンスが必要でっせと言ってますね。
- エラー文のとおりViewのインスタンスを渡してやる。
// app/View/Helper/MyHelper.php class MyHelper extends Helper { public function fuga($str) { // ここで自分自信をViewクラスの引数に渡したインスタンスをHtmlヘルパーに渡してあげる $view = new View($this); $this->Html= new MyHtmlHelper($view); return $this->Html->hoge($str); } }
「new View($this)」が
View自信のインスタンスになるのでこれを渡してあげることで、
これで正常に動きました^^
なんでViewが必要になったのか
ちゃーんと移行ガイドに書かれてましたw
■ViewはClassRegistryに登録されなくなりました
ビューがClassRegistryに登録されることは乱用を招き、事実上グローバルシンボルを作り出していました。
2.0では各ヘルパーは現在の View インスタンスをコンストラクタで受け取ります。
これはヘルパーにグローバルシンボルを作り出すことなく、以前の様式と同様にビューにアクセスさせることができます。
どのヘルパーでも $this->_View でビューのインスタンスにアクセスできます。
にゃるほどね。
だからViewからヘルパー呼ぶときに「$this->form」とかってなったのか。
あーすっきりした。
今日はじゃあこんなところで。
今年はやけに温暖な一年でしたが、もうかなり寒くなってきましたね。
チャリ通の自分は厳しい季節になってきました。
皆さん、風邪などひかぬようお体にお気を付け下さいね。
- 作者: 小川雄大,柄沢聡太郎,橋口誠
- 出版社/メーカー: 技術評論社
- 発売日: 2010/11/12
- メディア: 大型本
- 購入: 32人 クリック: 1,065回
- この商品を含むブログ (59件) を見る