【问题标题】:Session, PHP Incomplete ClassSession,PHP 不完整类
【发布时间】:2013-05-20 15:46:07
【问题描述】:

我正在使用 cakePHP 2.x 。目前正在处理 twitter OAuth,http://code.42dh.com/oauth/

function twitter_authentication()
{
            //assume above coding is all correct.   
    $this->Session->write('twitter_request_token', ($requestToken));
    $this->redirect('http://api.twitter.com/oauth/authenticate?force_login=true&oauth_token='.$requestToken->key); //I able to get $requestToken.
}

function twitter_login()
{
        $requestToken = $this->Session->read('twitter_request_token');
        $accessToken = $this->OAuthConsumer->getAccessToken('Twitter','https://api.twitter.com/oauth/access_token', $requestToken);

在 function_login() 中,我未能阅读会话并以 PhP Incomplete Class 结束。如果我这样做 $this->Session->write('twitter_request_token', serialize($requestToken));$requestToken = $this->Session->read(unserialize('twitter_request_token'); 它将起作用,但我会在其他地方因使用序列化和反序列化会话而导致错误。

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    “PHP 不完整类”表示 PHP 没有您正在加载的对象的类定义。

    选项A:在将对象写入会话时确定该对象是什么类,并确保在加载对象之前加载该类的定义。

    选项 B:在写入之前将对象转换为stdClass 或数组,并在加载后转换回来。这可能比第一个选项更复杂。

    【讨论】:

    • 对不起,我还是新手。你能告诉我在哪里加载 twitter 的类定义吗?我按照他的指导 code.42dh.com/oauth 进行操作,但没有看到课程负载。
    • 我不使用CakePHP,所以我不知道具体细节,但你有没有像上面所说的那样App::import?您是否尝试过明确包含 OAuth 库文件?
    • 是的.. 我确实遵循了完整的指南。
    【解决方案2】:

    OAuth.php 的 OauthToken 类非常简单,只有两个属性:key 和 secret。获取登录 url 后,可以将其作为数组存储到会话中:

    CakeSession::write('Twitter.requestToken', array(
        'key' => $requestToken->key,
        'secret' => $requestToken->secret
    ));
    

    然后,在调用 OAuthClient->getAccessToken() 时实例化你自己的 OAuthToken,如下所示:

    $sessionRequestToken = CakeSession::read('Twitter.requestToken');
    $accessToken = $twitterClient->getAccessToken('https://api.twitter.com/oauth/access_token', 
        new OAuthToken($sessionRequestToken['key'], $sessionRequestToken['secret']));
    

    应该准备好了:

    if ($accessToken) {
        $twitterClient->post($accessToken->key, $accessToken->secret, 
            'https://api.twitter.com/1/statuses/update.json', array('status' => 'My balls smells like A-1 sauce. #science'));
    }
    

    【讨论】:

      猜你喜欢
      • 2016-02-20
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      • 2020-02-26
      • 2011-07-13
      • 2017-05-21
      • 2016-10-06
      • 1970-01-01
      相关资源
      最近更新 更多