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

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

我被困在这个问题上,不知道如何解决。

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

在我的 EmailController 中:

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 是创建 cURL 请求的 PHP 函数的工作台。

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

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

但是当我尝试启动它时 "naturally",视图没有呈现,在我的 php.ini...

中加载设置为 max_execution_time 的时间

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

所以我的问题是:

如何让我的 foreach 仅在我的 $this->getMJAllCampaigns() 完全完成后才开始?

感谢您的宝贵时间。

您可以试试这个来获取来自特定发件人的所有活动:

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

var_dump($result);

查看此文档:http://dev.mailjet.com/email-api/v3/campaign/