如何使用Cache ::记住HttpSocket-> post cakephp

时间:2017-10-06 19:41:36

标签: php caching cakephp cakephp-2.0 anonymous-function

我想在CakePHP 2中缓存HttpSocket->post调用。

我正在调用以下代码:

$content = Cache::remember($key, function () use ($rateUrl, $xml, $uid) {
    App::uses('HttpSocket', 'Network/Http');
    $HttpSocket = new HttpSocket(array('ssl_verify_peer' => false));
    return $HttpSocket->post($rateUrl, $xml->asXML(), array(
        'header' => array(
            'Content-Type' => 'text/xml',
            'RestUid' => $uid,
        )
    ));
});

但是我收到了这个错误:

  

脚本尝试执行方法或访问不完整对象的属性。请确保类定义" HttpSocketResponse"您尝试操作的对象是在 unserialize()被调用之前加载或提供__autoload()函数来加载类定义

有人知道如何在匿名函数中使用HttpSocket类或在CakePHP中调用其他方法吗?

1 个答案:

答案 0 :(得分:0)

正如错误消息所示,您必须

  

[...]确保您尝试操作的对象的类定义“HttpSocketResponse”在 unserialize()被调用之前加载或提供__autoload()函数来加载班级定义

类型HttpSocketResponse的序列化对象的类定义在反序列化时不可用,因此无法正常工作。在调用App::uses之前添加相应的Cache::remember()语句,以便CakePHPs自动加载器可以加载所需的类定义

App::uses('HttpSocketResponse', 'Network/Http');

$content = Cache::remember(/* ... */);

或切换到使用Composer,以便可以在没有任何App::uses()调用的情况下自动加载所需的类。或者,也可以使用unserialize_callback_func ini指令来定义加载所需类定义的回调。

另见