ヘルパーをオーバーライドする
開発環境:CakePHP2.5.1
CakePHPで便利な機能が詰まったヘルパーですが、時々もう少しこうだったらという場合があります。
そんな時にやる方法として、コアライブラリ内のファイルを直接編集するというのはバージョンアップに対応し難くなるので避けるべきです。
そこで、classNameを使うのがスマートでおすすめです。
オーバーライドさせるヘルパーを作成
まずオーバーライドしたいヘルパーがHtmlHelperとしたとき、MyHtmlHelper.phpのようなヘルパーをapp/View/Helper内に作成します。
<?php
App::uses('HtmlHelper', 'View/Helper');
class MyHtmlHelper extends HtmlHelper {
public function link($title, $url = null, $options = array(), $confirmMessage = false) {
// やりたい処理をここに書く
return parent::link($title, $url, $options, $confirmMessage);
}
}
例えばlinkメソッドをカスタマイズしたい場合は上記のようにしてオーバーライドさせます。
コントローラーでclassNameを指定
コントローラーでHelperを呼び出す際にclassNameを指定してあげます。
<?php
public $helpers = array(
'Html' => array(
'className' => 'MyHtml',
),
);
ビューの表示は通常通り
最後にビューの表示ですが、上記のようにclassNameを使うことで通常通りの呼び出し方法でオーバーライドされた側のメソッドを呼び出すことができます。
<?php echo $this->Html->link('リンク', '/pages'); ?>
