2015-11-06 3 views
2

Я застрял в этой проблеме и не могу понять, как ее решить.Как визуализировать представление, когда запрос cURL (Mailjet) завершен?

Я использую 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 resquest.

Я знаю, что этот код в состоянии, функциональный.

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

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

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

Так что мой вопрос:

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

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

ответ

1

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

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

var_dump($result); 

Смотрите здесь: http://dev.mailjet.com/email-api/v3/campaign/

+0

я изменить способ доступа к МДж. Мои методы были способом тяжелого ... Большое спасибо @guillaume –