使用Facebook PHP SDK时会发生此错误,但我实际上认为这是一个常见错误。
当我运行这个代码时,一切都很好,异常被捕获:
$facebook = new Facebook('appId'=>APP_ID,'secret'=>APP_SECRET);
try {
$user_profile = $facebook->api('/me','GET');
echo "Name: " . $user_profile['name'];
} catch(FacebookApiException $e) {
$login_url = $facebook->getLoginUrl();
echo 'Please <a href="' . $login_url . '">login.</a>';
}
但是当我运行这个代码时:
$facebook = new Facebook_Extended('appId'=>APP_ID,'secret'=>APP_SECRET);
$facebook->api_extended();
扩展类的方法如下所示:
// Overrides parent::api()
public function api() {
try {
$user_profile = parent::api('/me','GET');
echo "Name: " . $user_profile['name'];
} catch(FacebookApiException $e) {
$login_url = $this->getLoginUrl();
echo 'Please <a href="' . $login_url . '">login.</a>';
}
}
我得到一个"未捕获的OAuthException"错误。
你知道为什么这个例外不能在儿童课堂上被发现吗?
我没有意识到这是一个问题,但这个类在一个命名空间中,所以我需要在我的异常中添加一个"''":
catch ('FacebookApiException $e)
http://onehackoranother.com/logfile/2009/01/php-5-3-exception-gotcha
api
方法不是静态的,所以你不应该这样使用它吗:
$user_profile = $this->api('/me','GET');
如果没有,您总是可以为一般异常添加另一个catch块,这样您就可以看到哪里出了问题。
public function api_extended() {
try {
$user_profile = parent::api('/me','GET');
echo "Name: " . $user_profile['name'];
} catch(FacebookApiException $e) {
$login_url = $this->getLoginUrl();
echo 'Please <a href="' . $login_url . '">login.</a>';
} catch(Exception $e) {
var_dump($e);
}
}
堆栈跟踪会更有帮助。暂时尝试以下
public function api_extended() {
try {
$user_profile = parent::api('/me','GET');
echo "Name: " . $user_profile['name'];
} catch(FacebookApiException $e) {
$login_url = $this->getLoginUrl();
echo 'Please <a href="' . $login_url . '">login.</a>';
} catch (Exception $err){
print_r($err->getTrace());
}
}