如何使用Cache::Memory with HttpSocket->;后cakephp

如何使用Cache::Memory with HttpSocket->;后cakephp,php,caching,cakephp,cakephp-2.0,anonymous-function,Php,Caching,Cakephp,Cakephp 2.0,Anonymous Function,我想缓存在cakephp2中调用的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 $Ht

我想缓存在cakephp2中调用的
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,
        )
    ));
});
但我得到了一个错误:

脚本试图执行方法或访问不完整对象的属性。请确保在调用unserialize()之前加载了您尝试操作的对象的类定义“HttpSocketResponse”,或者提供一个_autoload()函数来加载类定义

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

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

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

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

[…]确保在调用unserialize()之前加载了您尝试操作的对象的类定义“HttpSocketResponse”,或者提供一个_autoload()函数来加载类定义

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

$content = Cache::remember(/* ... */);
类型为
HttpSocketResponse
的序列化对象的类定义在反序列化后不可用,因此无法正常工作。在调用
Cache::memory()
之前,添加相应的
App::uses
语句,以便CakePHPs autoloader可以加载所需的类定义

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

$content = Cache::remember(/* ... */);
或者切换到使用Composer,这样就可以自动加载所需的类,而无需任何
App::uses()
调用。或者,也可以使用
unserialize\u callback\u func
ini指令定义加载所需类定义的回调

另见