Cakephp覆盖HtmlHelper :: link

时间:2011-04-10 18:40:16

标签: php cakephp cakephp-1.3 html-helper

我想设置HtmlHelper :: link()方法,所以默认的options数组有escape = false。

如何在不改变核心类的情况下实现这一目标?

OBS:我已经清理了表单输入,所以我猜这没有问题。

提前致谢。

7 个答案:

答案 0 :(得分:4)

Cake 2.1.5

我刚刚实现了这一点,我想指出一些事情:

您的自定义html帮助器应该扩展HTML帮助程序(并且不要忘记包含HTML帮助程序类)

App::uses('HtmlHelper', 'View/Helper');
class CustomHtmlHelper extends HtmlHelper {
   //yadda yadda
}

此外,您在AppController中的调用不应包含Helper一词:

'Html'=> array('className' =>'CustomHtml'),

答案 1 :(得分:3)

在Cake 2.0中

创建包含链接方法的OwnHelper类,该方法扩展了HtmlHelper,在AppController中指定:

$helpers = array('Html' => array('className' => 'OwnHelper'));

通过ADmad

答案 2 :(得分:2)

为什么不创建自己的自定义帮助器并创建一个方法来返回带有选项集的HTMLHelper链接?

http://book.cakephp.org/view/102/Including-other-Helpers

class MyHelper extends AppHelper {
  var $helpers = array('html');

  function linkNoEscape($title, $url)
    $options = array(); //set custom options, e.g. no escape 

    return $this->Html->link($title, $url, $options);
  }
}

答案 3 :(得分:2)

我永远不会轻易覆盖层次结构中更高层次的方法(即在AppHelper中),因为你总是很有可能打破其他依赖的助手。

希望能尽快发表评论,而不是给出垃圾半答案!

同样相关:我听说CakePHP 2.0会允许助手,组件等别名。例如,您想要更改HtmlHelper的输出,您可以将其替换为您自己的版本,而无需更改所有视图模板。

答案 4 :(得分:0)

您可以将原始HTMLHelpercake/libs/view/helpers复制到app/views/helpers,然后在那里修改link()方法。

答案 5 :(得分:0)

我认为cakephp应该实现的另一个好习惯是你也可以实现的是一个简单的工厂模式助手。以下应该只考虑psuedo而不是真正的代码。

$this->Factory->getHelper('Html')->link();

而不是

$this->Html->link();

以下面的例子为例

class FactoryHelper extends  Helper {
    public function getHelper($name) {
        if(Configure::read('Overrides.{$name}')) {
            return $this->{Configure::read('Overrides.{$name}')};
        }
        return (isset($this->{$name})?$this->{$name}:false);
    }

}

//Bootstrap is where you will set all your overrides
Configure::write('Overrides',array(
    'Html'=>'NewHtml'
));

//所以现在当你想要覆盖任何助手时

所以现在在你设置为覆盖Html Helper的引导程序中。在整个网站中,将调用新的“NewHtml”帮助程序,而不是传统的帮助程序。

答案 6 :(得分:-3)

你可以从AppHelper覆盖任何帮助方法,所以

class AppHelper extends Helper{
    function link($params, $go, $here){ ... code ...}
}