如何扩展或覆盖CakePHP核心助手的功能/方法

时间:2012-07-25 12:05:20

标签: cakephp

这:Cakephp Override HtmlHelper::link提出了一个非常相似的问题,但没有完整的答案。也许现在,有了Cake 2,就会有。

我想创建一个自定义助手,它是Cake的Paginator Helper的子类。我希望我的新助手覆盖Cake的Paginator助手的'numbers'方法,但我希望它继承所有其他方法。

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

2 个答案:

答案 0 :(得分:11)

添加到Brelsnok的解决方案中,别名是正确的方法。如果您将此代码添加到AppController.php文件中,则无论何时使用Paginator,它都将使用您的扩展类。

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

由于PaginatorExtHelper类已经扩展了PaginatorHelper,因此被覆盖的唯一函数是numbers。任何对其他Paginator方法的调用都将由核心PaginatorHelper类处理,就像它是一个vanilla Cake安装一样。

答案 1 :(得分:5)

PaginatorExtHelper.php文件夹中创建文件View/Helper/。它可能看起来像下面 而不是发起$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()继承其他功能。