我被困在這個問題上,無法弄清楚如何解決它。如何在(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只啓動?
謝謝你的時間。
我確實改變了訪問MJ的方式。我的方法是沉重的... 非常感謝@guillaume –