如何在(Mailjet)cURL请求完成时呈现视图


How to render a view when a (Mailjet) cURL request is finnished?

我被这个问题卡住了,不知道如何解决它。

我使用CakePhp2.x作为一个框架,使用Mailjet发送邮件并获取它们的状态。(Mailjet是Mailchimp的法国竞争对手)。我想在我的索引中显示所有通过Mailjet发送的活动。

在我的电子邮件控制器中:

public function index() {
    $clubCampaigns = $this->getMJAllCampaigns('emailofthe@club.com');
    $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提供的Mailjet对象。这个API是一个PHP函数的平台,创建cURL resquest。

我知道这个代码在状态下是有效的。

因为当我var_dump($clubCampaigns); die;时,它会呈现预期的数组。

但当我尝试"自然"启动它时,视图不会被渲染,在我的php.ini中加载时间集为max_execution_time。。。

我认为CakePhp试图在$this->getMJAllCampaigns完成之前执行foreach并渲染视图。

所以我的问题是:

只有当我的$this->getMJAllCampaigns()完全完成时,我才能告诉我的前臂开始?

谢谢你抽出时间。

您可以尝试从特定发件人获取每个活动:

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

请参阅此文档:http://dev.mailjet.com/email-api/v3/campaign/