【问题标题】:How to extend or override functionality/methods of a CakePHP Core Helper如何扩展或覆盖 CakePHP Core Helper 的功能/方法
【发布时间】:2012-07-25 12:05:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: cakephp


    【解决方案1】:

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

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

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

    【讨论】:

    • 不敢相信我不知道这个功能。谢谢德里克
    • 在 CakePHP 2.4.4 上,我使用上面的代码遇到了错误消息。 Helper class PaginatorExtHelperHelper could not be found.。我改用代码public $helpers = array( 'Paginator' => array('className' => 'PaginatorExt' ) );
    【解决方案2】:

    在您的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(),您可以继承其他功能。

    【讨论】:

    • 是的 - 或者别名 :) book.cakephp.org/2.0/en/appendices/…
    • 啊... App::uses('PaginatorHelper', 'View/Helper');是我所缺少的。愚蠢的错误。谢谢布雷斯诺克。标记 - 别名看起来像是要完全覆盖一个助手,而不是扩展一个。对吗?
    猜你喜欢
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多