Я застрял в этой проблеме и не могу понять, как ее решить.
Я использую 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, предоставленный Mailjet API. Этот API представляет собой набор функций PHP, создающих запрос cURL.
Я знаю, что этот код в рабочем состоянии.
Потому что когда я var_dump($clubCampaigns); die;
, он отображает ожидаемый массив.
Но когда я пытаюсь запустить его «естественно», представление не отображается, загружая время, установленное как max_execution_time
в моем php.ini
…
Я думаю, что CakePhp пытается выполнить foreach
и сделать вид перед $this->getMJAllCampaigns
завершено.
Итак, мой вопрос:
Как я могу сказать, что мой foreach должен начинаться только тогда, когда мой $this->getMJAllCampaigns()
полностью сделано?
Спасибо за ваше время.
Вы можете попробовать это, чтобы получить каждую кампанию от определенного отправителя:
$result = $mj->campaign([
'FromEmail' => 'sender email'
]);
var_dump($result);
Смотрите эту документацию: http://dev.mailjet.com/email-api/v3/campaign/
Других решений пока нет …