2015-11-06 33 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 –