我想得到我的api例外,但我不明白该怎么做。 这是我的代码
public function facebook($link){
if(!$link || !trim($link) != ""){
return false;
}
$config = array(
'appId'=>$this->keys['facebook']['id'],
'secret'=>$this->keys['facebook']['secret'],
'fileUpload'=>false
);
$facebook = new Facebook($config);
$start = strrpos($link, '/', -1);
$end = strripos($link, '?', -1);
$end = ($end)?$end:strlen($link);
$pageId = ($end == strlen($link))?substr($link, $start + 1):substr($link, $start + 1, $end - strlen($link));
try {
$pagefeed = $facebook->api("/" . $pageId . "/feed");
}
catch (FacebookApiException $e){
return false;
}
//set datetime
foreach ($pagefeed['data'] as $key => $post){
$pagefeed['data'][$key]['datetime'] = new \DateTime($post['created_time']);
}
return $pagefeed;
}
所以我想在异常的情况下返回false。
我得到了例子:
BaseFacebook ->throwAPIException (array('error' => array('message' => '(#803) Some of the aliases you requested do not exist: lkdsgfkqdjgflkdshbf', 'type' => 'OAuthException', 'code' => '803')))
感谢您的帮助
答案 0 :(得分:2)
由于您已经评论过您正在使用symfony,并且使用catch(\Exception $e)
修复了类型提示,因此您可能需要考虑将其添加到文件的顶部:
use \APIException;
将APIException
设置为\APIException
的别名。 Also check this link。没有使用FB API,我不知道它是否仍然相关,但假设facebook api存储在你的供应商目录中,你必须在使用Facebook api时指定正确的命名空间。
\Exception
工作的原因仅仅是因为,如链接页面所示,APIException
类从\Exception
基类扩展,因此类型提示有效。这并不重要,但通常最好在正确的地方捕捉到正确的例外。
抛出异常,然后使用catch
块捕获它。到目前为止,这很好,但是,它被捕获在方法的范围内,当该方法返回时(GC收集垃圾)。 Exception
isntance不再退出。
通常,如果要访问方法之外的异常(很可能是在调用该方法的代码中),则只是不捕获异常。从try-catch
方法中删除facebook
,然后执行以下操作:
//call method:
try
{
$return = $instance->facebook($someLink);
}
catch (APIException $e)
{
$return = false;//exception was thrown, so the return value should be false
var_dump($e);//you have access to the exception here, too
}
捕捉异常并且没有做任何事情(你正在捕捉但是返回虚假,无法知道为什么)被认为是不好的做法。
如果你想避免在try-catch中将所有这些调用包装到facebook
方法中,你也可以这样做:
//in class containing facebook method:
private $lastException = null;
public function getLastException()
{
return $this->lastException;
}
现在,您可以将facebook
方法的catch块更改为:
catch(APIException $e)
{
$this->lastException = $e;
return false;
}
做类似的事情:
$return = $instance->facebook($link);
if ($return === false)
{
var_dump($instance->getLastException());
exit($instance->getLastException()->getMessage());
}