2

我被困在这个问题上,无法弄清楚如何解决它。

我使用 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 函数台。

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

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

但是当我尝试“自然地”启动它时,视图不会呈现,加载时间设置为max_execution_time我的php.ini...

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

所以我的问题是:

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

谢谢你的时间。

4

1 回答 1

1

您可以尝试这样做以从特定发件人那里获取每个广告系列:

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

var_dump($result);

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

于 2015-11-07T17:04:51.950 回答