无法理解 Facebook 未捕获的异常
Trouble understanding Facebook Uncaught Exception
我是 Facebook PHP SDK 的超级新手。我无法理解下面的堆栈跟踪;我应该在哪里寻找错误?
Facebook 预定帖子已成功处理,但是,此错误会导致糟糕的用户体验,但是,我程序中的其他所有内容都运行良好。看起来它可能正在尝试处理不存在的东西。
正在执行的最后一行代码(我知道是因为预定的帖子显示在我的 Facebook 测试帐户中)是:
$responses = $fb->sendBatchRequest(($batch), $this->session->userdata('fb_access_token'));
$batch 定义为:
foreach($esdarr as $key => $event_start_datetime){$sched_time = strtotime($event_start_datetime)- 18000;
$event_end_datetime = $eedarr[$key];
$requestScheduleEvent = $fb->post('/'.$band_page_id.'/feed', ['message' => $band_name.' is playing today at '.$venue_name.' '.date('(l), g:ia', strtotime($event_start_datetime)), 'published'=>false, 'scheduled_publish_time'=>$sched_time], $pageToken);
$batch[$key]=$requestScheduleEvent;
}
这一切都在 CI 控制器 (event.php) 中,具有 public 函数 add()。然后我得到这个错误:
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Argument for add() must be of type array or FacebookRequest.' in /home/my_user/public_html/development/application/vendor/facebook/php-sdk-v4/src/Facebook/FacebookBatchRequest.php:85 Stack trace:
#0 /home/my_user/public_html/development/application/vendor/facebook/php-sdk-v4/src/Facebook/FacebookBatchRequest.php(78): Facebook\FacebookBatchRequest->add(Object(Facebook\FacebookResponse), 0)
#1 /home/my_user/public_html/development/application/vendor/facebook/php-sdk-v4/src/Facebook/FacebookBatchRequest.php(61): Facebook\FacebookBatchRequest->add(Array)
#2 /home/my_user/public_html/development/application/vendor/facebook/php-sdk-v4/src/Facebook/Facebook.php(492): Facebook\FacebookBatchRequest->__construct(Object(Facebook\FacebookApp), Array, 'EAAYzEGW0ZAsoBA...', 'v2.7')
#3 /home/my_user/public_html/development/application/controllers/user/event.php(777): Facebook\Facebook->sendBatchRequest(Array, 'EAAYzEGW0ZAsoBA...')
#4 [internal function]: Event->add in /home/my_user/public_html/development/application/vendor/facebook/php-sdk-v4/src/Facebook/FacebookBatchRequest.php on line 85
如果我按如下方式更改 FacebookBatchRequest.php 的第 85 行(即将页面重定向到 CI 结构中正确的 URL),一切似乎都正常:
public function add($request, $name = null)
{
if (is_array($request)) {
foreach ($request as $key => $req) {
$this->add($req, $key);
}
return $this;
}
if (!$request instanceof FacebookRequest) {
***redirect('user/event');***
throw new \InvalidArgumentException('Argument for add() must be of type array or FacebookRequest.');
}
$this->addFallbackDefaults($request);
$requestToAdd = [
'name' => $name,
'request' => $request,
];
当然,这充其量只是一种脆弱的解决方法。所以,我想知道为什么首先会抛出错误。
如果您在程序中定义了 add() 并且 add() 也内置于 SDK 中,则它将无法运行。尝试使用不同的名称。
如果这不是问题所在,请 post 你的代码好吗?也许我们当中有人能找到它。
你使用什么语言?也许你只是有一个语法错误。
我希望这对您有所帮助!
好吧,这是我对批处理的错误使用。
$requestScheduleEvent = $fb->post('/'.$band_page_id.'/feed', ['message' => $band_name.' is playing today at '.$venue_name.' '.date('(l), g:ia', strtotime($event_start_datetime)), 'published'=>false, 'scheduled_publish_time'=>$sched_time], $pageToken);
需要使用请求方式:
$batch[$key] = $fb->request('POST', '/'.$band_page_id.'/feed', ['message' => $band_name.' is playing today at '.$venue_name.' '.date('(l), g:ia', strtotime($event_start_datetime)), 'published'=>false, 'scheduled_publish_time'=>$sched_time], $pageToken);
我是 Facebook PHP SDK 的超级新手。我无法理解下面的堆栈跟踪;我应该在哪里寻找错误?
Facebook 预定帖子已成功处理,但是,此错误会导致糟糕的用户体验,但是,我程序中的其他所有内容都运行良好。看起来它可能正在尝试处理不存在的东西。
正在执行的最后一行代码(我知道是因为预定的帖子显示在我的 Facebook 测试帐户中)是:
$responses = $fb->sendBatchRequest(($batch), $this->session->userdata('fb_access_token'));
$batch 定义为:
foreach($esdarr as $key => $event_start_datetime){$sched_time = strtotime($event_start_datetime)- 18000;
$event_end_datetime = $eedarr[$key];
$requestScheduleEvent = $fb->post('/'.$band_page_id.'/feed', ['message' => $band_name.' is playing today at '.$venue_name.' '.date('(l), g:ia', strtotime($event_start_datetime)), 'published'=>false, 'scheduled_publish_time'=>$sched_time], $pageToken);
$batch[$key]=$requestScheduleEvent;
}
这一切都在 CI 控制器 (event.php) 中,具有 public 函数 add()。然后我得到这个错误:
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Argument for add() must be of type array or FacebookRequest.' in /home/my_user/public_html/development/application/vendor/facebook/php-sdk-v4/src/Facebook/FacebookBatchRequest.php:85 Stack trace:
#0 /home/my_user/public_html/development/application/vendor/facebook/php-sdk-v4/src/Facebook/FacebookBatchRequest.php(78): Facebook\FacebookBatchRequest->add(Object(Facebook\FacebookResponse), 0)
#1 /home/my_user/public_html/development/application/vendor/facebook/php-sdk-v4/src/Facebook/FacebookBatchRequest.php(61): Facebook\FacebookBatchRequest->add(Array)
#2 /home/my_user/public_html/development/application/vendor/facebook/php-sdk-v4/src/Facebook/Facebook.php(492): Facebook\FacebookBatchRequest->__construct(Object(Facebook\FacebookApp), Array, 'EAAYzEGW0ZAsoBA...', 'v2.7')
#3 /home/my_user/public_html/development/application/controllers/user/event.php(777): Facebook\Facebook->sendBatchRequest(Array, 'EAAYzEGW0ZAsoBA...')
#4 [internal function]: Event->add in /home/my_user/public_html/development/application/vendor/facebook/php-sdk-v4/src/Facebook/FacebookBatchRequest.php on line 85
如果我按如下方式更改 FacebookBatchRequest.php 的第 85 行(即将页面重定向到 CI 结构中正确的 URL),一切似乎都正常:
public function add($request, $name = null)
{
if (is_array($request)) {
foreach ($request as $key => $req) {
$this->add($req, $key);
}
return $this;
}
if (!$request instanceof FacebookRequest) {
***redirect('user/event');***
throw new \InvalidArgumentException('Argument for add() must be of type array or FacebookRequest.');
}
$this->addFallbackDefaults($request);
$requestToAdd = [
'name' => $name,
'request' => $request,
];
当然,这充其量只是一种脆弱的解决方法。所以,我想知道为什么首先会抛出错误。
如果您在程序中定义了 add() 并且 add() 也内置于 SDK 中,则它将无法运行。尝试使用不同的名称。
如果这不是问题所在,请 post 你的代码好吗?也许我们当中有人能找到它。
你使用什么语言?也许你只是有一个语法错误。
我希望这对您有所帮助!
好吧,这是我对批处理的错误使用。
$requestScheduleEvent = $fb->post('/'.$band_page_id.'/feed', ['message' => $band_name.' is playing today at '.$venue_name.' '.date('(l), g:ia', strtotime($event_start_datetime)), 'published'=>false, 'scheduled_publish_time'=>$sched_time], $pageToken);
需要使用请求方式:
$batch[$key] = $fb->request('POST', '/'.$band_page_id.'/feed', ['message' => $band_name.' is playing today at '.$venue_name.' '.date('(l), g:ia', strtotime($event_start_datetime)), 'published'=>false, 'scheduled_publish_time'=>$sched_time], $pageToken);