Opencart:无法使用$ this-> url->链接和卷曲来呼叫控制器

时间:2014-11-28 10:30:30

标签: curl opencart

我想用cUrl这样调用一个页面:

    $ch = curl_init();
    $timeout = 0; // set to zero for no timeout
    curl_setopt ($ch, CURLOPT_URL, $this->url->link('account/order/invoice', 'order_id=20'));
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $invoice = curl_exec($ch);
    curl_close($ch);

这不起作用。 " ORDER_ID = 20"没有传递给控制器​​。 这确实有效:

    $ch = curl_init();
    $timeout = 0; // set to zero for no timeout
    curl_setopt ($ch, CURLOPT_URL, 'http://webshop.local/index.php?route=account/order/invoice&order_id=20');
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $factuur = curl_exec($ch);
    curl_close($ch);

当我回复$ this-> url->链接('帐户/订单/发票',' order_id = 20')时,网址是正确的。

我没有看到任何区别。我可以使用第二种方法,但第一种方法更适合在opencart中创建URL。

我想知道我做错了什么或为什么会这样。

1 个答案:

答案 0 :(得分:2)

答案是网址不相同

检查/system/url.php中的代码:

if ($args) {
    $url .= str_replace('&', '&', '&' . ltrim($args, '&')); 
}

您生成的网址为:

http://webshop.local/index.php?route=account/order/invoice&order_id=20

与您手写的相比:

http://webshop.local/index.php?route=account/order/invoice&order_id=20

这是因为帮助程序设计为输出打算在HTML中使用的URL ,其中&将被正确解析。回收您生成的链接并查看页面来源,或查看您的商店链接,您就会明白我的意思。

如果您深入挖掘并查看帐户/帐户控制器的顶部,您会看到:

$this->redirect($this->url->link('account/login', '', 'SSL'));

重定向帮助程序(在system / engine / controller.php中)实际上必须再次转换&s 才能使用URL帮助程序创建的URL:

header('Location: ' . str_replace(array('&', "\n", "\r"), array('&', '', ''), $url));

坦率地说,这有点乱,但这就是你必须要做的事情。

因此,如果您想使用URL帮助程序,我建议您执行与OpenCart本身相同的操作:

curl_setopt ($ch, CURLOPT_URL, str_replace('&', '&', $this->url->link('account/order/invoice', 'order_id=20')));