2

私はこの問題で立ち往生しており、解決方法がわかりません。

フレームワークとして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 resquest を作成する PHP 関数のベンチです。

私は、このコードが状態で機能していることを知っています。

Ivar_dump($clubCampaigns); die;の場合、期待される配列がレンダリングされるためです。

しかし、「自然に」起動しようとすると、ビューがレンダリングされずmax_execution_time、私のように設定された時間が読み込まれphp.iniます...

CakePhp はforeach、 が完了する前にビューを実行してレンダリングしようとしていると思います$this->getMJAllCampaigns

だから私の質問は:

foreach が完全に完了したときにのみ開始するように指示するにはどうすればよい$this->getMJAllCampaigns()ですか?

御時間ありがとうございます。

4

1 に答える 1

1

これを試して、特定の送信者からすべてのキャンペーンを取得できます。

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

var_dump($result);

このドキュメントを参照してください: http://dev.mailjet.com/email-api/v3/campaign/

于 2015-11-07T17:04:51.950 に答える