【问题标题】:How to use Cache::remember with HttpSocket->post cakephp如何使用 Cache::remember 和 HttpSocket->post cakephp
【发布时间】:2018-03-18 16:23:03
【问题描述】:

我想缓存在 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 或其他方式中调用吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    App::uses('HttpSocketResponse', 'Network/Http');
    
    $content = Cache::remember(/* ... */);
    

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

    另见

    【讨论】:

      猜你喜欢
      • 2012-08-15
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 2015-04-13
      相关资源
      最近更新 更多