ヘルパーをオーバーライドする
開発環境: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'); ?>