【发布时间】:2011-04-10 18:40:16
【问题描述】:
我想设置 HtmlHelper::link() 方法,所以默认选项数组有 escape = false。
如何在不改变核心类的情况下实现这一点?
OBS:我已经清理了表单输入,所以我想这不会有问题。
提前致谢。
【问题讨论】:
标签: php cakephp cakephp-1.3 html-helper
我想设置 HtmlHelper::link() 方法,所以默认选项数组有 escape = false。
如何在不改变核心类的情况下实现这一点?
OBS:我已经清理了表单输入,所以我想这不会有问题。
提前致谢。
【问题讨论】:
标签: php cakephp cakephp-1.3 html-helper
蛋糕 2.1.5
我刚刚实现了这个,我想指出几点:
您的自定义 html 帮助器应该扩展 HTML 帮助器(并且不要忘记包含 HTML 帮助器类)
App::uses('HtmlHelper', 'View/Helper');
class CustomHtmlHelper extends HtmlHelper {
//yadda yadda
}
此外,您在 AppController 中的调用不应包含 Helper 一词:
'Html'=> array('className' =>'CustomHtml'),
【讨论】:
在 Cake 2.0 中
创建包含链接方法的 OwnHelper 类,该方法扩展 HtmlHelper,在 AppController 中指定:
$helpers = array('Html' => array('className' => 'OwnHelper'));
通过 ADmad
【讨论】:
您为什么不创建自己的自定义助手并创建一个方法来返回带有选项集的 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);
}
}
【讨论】:
我从不习惯覆盖层次结构中较高的方法(即在 AppHelper 中),因为您总是很有可能破坏其他依赖的助手。
希望能够尽快发表评论,而不是给出垃圾一半的答案!
同样相关:我听说 CakePHP 2.0 将允许助手、组件等使用别名。例如,您想更改 HtmlHelper 的输出,您可以将其替换为您自己的版本,而无需更改所有视图模板。
【讨论】:
您可以将原来的HTMLHelper 从cake/libs/view/helpers 复制到app/views/helpers 并在那里修改link() 方法。
【讨论】:
cake 文件夹中,否则更新会很麻烦。
我认为 cakephp 应该实现的另一个你也可以实现的好实践是一个简单的工厂模式助手。以下应考虑只是伪代码而不是真实代码。
$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”帮助程序,而不是传统的帮助程序。
【讨论】:
你可以从 AppHelper 覆盖任何辅助方法,所以
class AppHelper extends Helper{
function link($params, $go, $here){ ... code ...}
}
【讨论】:
link 方法,不是吗?