2012-07-25 130 views
4

This:Cakephp Override HtmlHelper::link问一个非常类似的问题,但没有完整的答案。也许现在,Cake 2将会出现。如何扩展或覆盖CakePHP Core Helper的功能/方法

我想创建一个自定义帮助程序,它是Cake的Paginator Helper的子类。我希望我的新帮手重写Cake的Paginator助手的'数字'方法,但我希望它继承所有其他方法。

是否可以通过这种方式扩展核心帮助程序?显然,我不想:修改Cake Core;将不必要的代码放在AppHelper超类中;或者将整个核心分页助手复制到我的新帮手中。

回答

11

添加到Brelsnok的解决方案,别名是正确的方式来做到这一点。如果您将此代码添加到您的AppController.php文件中,则只要您使用Paginator,它就会使用您的扩展类。

public $helpers = array(
'Paginator' => array('className' => 'PaginatorExt') 
); 

由于PaginatorExtHelper类已经扩展PaginatorHelper,被覆盖的唯一功能是numbers。对其他Paginator方法的任何调用都将由核心PaginatorHelper类来处理,就像它是一个香草蛋糕安装一样。

+0

我同意,别名是更好的方法去... – 2013-05-29 03:08:26

+0

不能相信我不知道这个功能。谢谢Derek – 2013-08-26 11:59:53

+0

在CakePHP 2.4.4上,我遇到了使用上述代码的错误消息。 '找不到助手类PaginatorExtHelperHelper.'。我使用了代码'public $ helpers = array( 'Paginator'=> array('className'=>'PaginatorExt') );'改为。 – VCD 2014-03-04 02:44:25

5

在您的View/Helper/文件夹中创建文件PaginatorExtHelper.php。它可能看起来像下面。的
,转而开始做$helpers = array('Paginator');$helpers = array('PaginatorExt');

<?php 
App::uses('PaginatorHelper', 'View/Helper'); 

class PaginatorExtHelper extends PaginatorHelper { 

    public function numbers($options = array()) { 
     // logic here 


     return $out; 
    } 
} 
?> 

通过实施仅public function numbers()你继承等功能。

+1

耶 - 或别名:) http://book.cakephp.org/2.0/en/appendices/new-features-in-cakephp-2-0.html#aliasing – mark 2012-07-25 12:19:02

+0

啊... App :: uses( 'PaginatorHelper','View/Helper');我错过了 。愚蠢的错误。感谢Brelsnok。标记锯齿看起来像是完全覆盖了一个帮手,而不是扩展一个。正确? – 2012-07-25 12:23:12

+0

看起来像一个更平滑的解决方案。谢谢! – 2012-07-25 12:24:21