2012-04-09 10 views
3

cakePHP 2.xを使用しています。現在、twitter OAuthについて、http://code.42dh.com/oauth/について行っています。セッション、PHP不完全クラス

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');を実行すると動作しますが、シリアライズとセッションのシリアライズを使用することによって発生した他の場所でエラーが発生します。

答えて

2

"PHP Incomplete Class"は、PHPが読み込んでいるオブジェクトのクラス定義を持っていないことを意味します。

オプションA:セッションに書き込むときのオブジェクトのクラスを特定し、オブジェクトをロードする前にそのクラスの定義がロードされていることを確認します。

オプションB:オブジェクトを書き込む前にstdClassまたは配列に変換し、読み込んだ後に変換します。これは最初のオプションより複雑かもしれません。

+0

申し訳ありませんが、私はまだ新しいです。あなたはTwitterのクラス定義をロードする場所を教えてください。私は彼のガイドhttp://code.42dh.com/oauth/に従い、クラスロードを見ていませんでした。 – Maki92

+0

私はCakePHPを使っていないので、具体的なことは分かりませんでしたが、それは言ったように 'App :: import'ですか?あなたは明示的にOAuthのlibファイルを含めてみましたか? – DCoder

+0

うん..私は完全なガイドラインに従った。 – Maki92

0

OAuth.phpのOauthTokenクラスは、キーとシークレットの2つのプロパティだけで非常に簡単です。あなたは、ログイン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')); 
}