cakePHP v2,TextHelper :: autoLinkUrls,preg_replace_callback(),错误:需要参数2

时间:2013-06-11 00:58:05

标签: cakephp preg-replace-callback

有没有人在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]

1 个答案:

答案 0 :(得分:2)

不要静态调用非静态方法

The code您所指的功能是:

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 /功能更改。