Как отобразить представление, когда запрос (Mailjet) cURL завершен?

Я застрял в этой проблеме и не могу понять, как ее решить.

Я использую 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, предоставленный Mailjet API. Этот API представляет собой набор функций PHP, создающих запрос cURL.

Я знаю, что этот код в рабочем состоянии.

Потому что когда я var_dump($clubCampaigns); die;, он отображает ожидаемый массив.

Но когда я пытаюсь запустить его «естественно», представление не отображается, загружая время, установленное как max_execution_time в моем php.ini

Я думаю, что CakePhp пытается выполнить foreach и сделать вид перед $this->getMJAllCampaigns завершено.

Итак, мой вопрос:

Как я могу сказать, что мой foreach должен начинаться только тогда, когда мой $this->getMJAllCampaigns() полностью сделано?

Спасибо за ваше время.

2

Решение

Вы можете попробовать это, чтобы получить каждую кампанию от определенного отправителя:

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

var_dump($result);

Смотрите эту документацию: http://dev.mailjet.com/email-api/v3/campaign/

1

Другие решения

Других решений пока нет …