2015-11-06 98 views
2

我被困在这个问题上,无法弄清楚如何解决它。如何在(Mailjet)cURL请求结束时呈现视图?

我使用CakePhp 2.x作为框架,Mailjet发送邮件并获取其状态。 (Mailjet是Mailchimp的法国竞争对手)。 我想在索引中显示通过Mailjet发送的所有广告系列。

在我EmailController:

public function index() { 

    $clubCampaigns = $this->getMJAllCampaigns('[email protected]'); 

    $viewCampaigns = array(); 

    foreach ($clubCampaigns as $key => $Campaign) { 
      $viewCampaigns[$key]['Subject'] = $Campaign->Subject; 
      $viewCampaigns[$key]['Campaign'] = $this->getMJCampaign($Campaign->ID); 
      $viewCampaigns[$key]['Messages'] = $this->getMJMessageSentStatistics($Campaign->ID); 
     } 
    $this->set('viewCampaigns', $viewCampaigns); 

    return $this->render(); 
} 

我让我的电子邮件活动使用此功能。

protected function getMJAllCampaigns($senderID = null, $fromTS = null, $toTS = null) { 

    /* @render none */ 
    $this->autoRender = false; 

    if($senderID == null || $senderID == ''){ 
     throw new Exception('$SenderID is NULL : Cannot request Mailjet API'); 
     return false; 
    } 

    if($toTS == null){ 
     $toTS  = new DateTime(); 
    } 

    if($fromTS == null){ 
     $fromTS  = new DateTime(); 
     $fromTS->sub(new DateInterval("P1W")); 
    } 

    /* Create Mailjet Object */ 
    $Mailjet = new Mailjet(); 

    $params = array (
     'Limit'  => 1000, 
     'FromID' => $SenderID, 
     'From'  => $SenderID, 
     'FromTS' => $fromTS->format(DATE_RFC3339), //Format T RFC 3339 DateTime 
     'ToTS'  => $toTS->format(DATE_RFC3339)  //Format T RFC 3339 DateTime 
    ); 


    $MJCampaign = $Mailjet->campaign($params); 

    /* Parsing cURL response */ 
    $countCampaign = $MJCampaign->Count; 
    $campaigns  = $MJCampaign->Data; 

    if($countCampaign == 0 || $campaigns == null){ 
     //throw new Exception('No campaign found - Break'); 
     $campaigns = false; 
    } 

    return $campaigns; 
} 

我使用的邮件对象由Mailjet API给出。这个API是创建cURL resquest的PHP函数的一个工具。

我知道这个代码在状态中是有效的。因为当我var_dump($clubCampaigns); die;,它呈现期望的数组。

但是,当我尝试推出其“自然”,视图不会呈现,加载设置为max_execution_time的时间在我的php.ini ...

我认为CakePHP是试图执行foreach和渲染在$this->getMJAllCampaigns完成之前查看。

所以我的问题是:

我怎样才能知道当我的$this->getMJAllCampaigns()是完全做得到我的foreach只启动?

谢谢你的时间。

回答

1

你可以试试这个从特定发件人让每一个活动:

$result = $mj->campaign([ 
    'FromEmail' => 'sender email' 
]); 

var_dump($result); 

看到这个文档:http://dev.mailjet.com/email-api/v3/campaign/

+0

我确实改变了访问MJ的方式。我的方法是沉重的... 非常感谢@guillaume –