1

我对Facebook PHP SDK超级新手。我无法理解下面的堆栈跟踪;我应该在哪里寻找错误?麻烦理解Facebook Uncaught异常

Facebook计划的帖子正在成功处理,但是,此错误会导致不良的用户体验,但是,我的程序中的其他所有内容都正常工作。看起来它可能试图处理那些不存在的东西。正在执行

的最后一行代码(我知道是因为排定发表的文章在我的Facebook测试帐号显示)是:

$responses = $fb->sendBatchRequest(($batch), $this->session->userdata('fb_access_token')); 

$一批被定义为:

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; 
    } 

这是全部在具有公共函数add()的CI控制器(event.php)中。然后,我得到这个错误:如果我改变线#85 FacebookBatchRequest.php的

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 

如下(即,页面重定向到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, 
    ]; 

当然,这是一个很好的解决方法。所以,我想知道为什么错误首先被抛出。

回答

0

好的,这最终是我对批处理过程的错误使用。

$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); 
0

如果您在程序中定义了add(),并且add()也内置于SDK中,则该方法无效。尝试使用不同的名称。

如果这不是问题,您可以发布您的代码吗?也许我们其中一个人可以找到它。

您使用哪种语言?也许你只是有一个语法错误。

我希望这有助于任何方式!