如何在 (Mailjet) cURL 请求完成时呈现视图?
How to render a view when a (Mailjet) cURL request is finnished?
我被困在这个问题上,不知道如何解决。
我正在使用 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 API 提供的 Mailjet 对象。 API 是创建 cURL 请求的 PHP 函数的工作台。
我知道这段代码在状态下是有效的。
因为当我var_dump($clubCampaigns); die;
时,它呈现了预期的数组。
但是当我尝试启动它时 "naturally",视图没有呈现,在我的 php.ini
...
中加载设置为 max_execution_time
的时间
我认为 CakePhp 正在尝试执行 foreach
并在 $this->getMJAllCampaigns
完成之前渲染视图。
所以我的问题是:
如何让我的 foreach 仅在我的 $this->getMJAllCampaigns()
完全完成后才开始?
感谢您的宝贵时间。
您可以试试这个来获取来自特定发件人的所有活动:
$result = $mj->campaign([
'FromEmail' => 'sender email'
]);
var_dump($result);
我被困在这个问题上,不知道如何解决。
我正在使用 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 API 提供的 Mailjet 对象。 API 是创建 cURL 请求的 PHP 函数的工作台。
我知道这段代码在状态下是有效的。
因为当我var_dump($clubCampaigns); die;
时,它呈现了预期的数组。
但是当我尝试启动它时 "naturally",视图没有呈现,在我的 php.ini
...
max_execution_time
的时间
我认为 CakePhp 正在尝试执行 foreach
并在 $this->getMJAllCampaigns
完成之前渲染视图。
所以我的问题是:
如何让我的 foreach 仅在我的 $this->getMJAllCampaigns()
完全完成后才开始?
感谢您的宝贵时间。
您可以试试这个来获取来自特定发件人的所有活动:
$result = $mj->campaign([
'FromEmail' => 'sender email'
]);
var_dump($result);