有人在 cakePHP v2.0 中使用 autoLinkUrls 函数有问题吗?
它给了我这个错误:
Warning (2): preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'View::_linkBareUrl', to be a valid callback [CORE\Cake\View\Helper\TextHelper.php, line 128]
有人在 cakePHP v2.0 中使用 autoLinkUrls 函数有问题吗?
它给了我这个错误:
Warning (2): preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'View::_linkBareUrl', to be a valid callback [CORE\Cake\View\Helper\TextHelper.php, line 128]
您所指的功能的代码是:
public function autoLinkUrls($text, $htmlOptions = array()) {
$this->_linkOptions = $htmlOptions;
$text = preg_replace_callback(
'#(?<!href="|src="|">)((?:https?|ftp|nntp)://[^\s<>()]+)#i',
array(&$this, '_linkBareUrl'),
$text
);
return preg_replace_callback(
'#(?<!href="|">)(?<!http://|https://|ftp://|nntp://)(www\.[^\n\%\ <]+[^<\n\%\,\.\ <])(?<!\))#i',
array(&$this, '_linkUrls'),
$text
);
}
它不是静态方法,而是基于错误消息 -$this
是一个视图实例。这意味着您可能会静态调用它,即:
echo TextHelper::autoLinkUrls($foo);
这是错误的,不要那样做 - 而是按设计使用它:
echo $this->Text->autoLinkUrls($foo);
虽然它与手头的问题无关,但 2.0.0 已经存在两年了。从那时起已经发布了 6 个补丁版本,明智的做法是更新到最新版本(撰写本文时为2.0.6。错误修复/补丁版本根本没有功能更改)。升级到最近的次要版本(2.1.x、2.2.x、2.3.x)将引入新功能,但也需要审查您的应用程序并可能适应引入/删除的 api/功能更改。