1

リダイレクト前の SwiftMailer の使用に関して問題があります。コントローラーがリクエストを返すことを許可すると、メールは正常に送信されます。例えば:

function foo() {

    // ...

    $message = \Swift_Message::newInstance()
        ->setSubject($subject)
        ->setFrom($sender)
        ->setTo($recipient)
        ->setBody(strip_tags($html))
        ->addPart($html, 'text/html');
    $result = $this->app['mailer']->send($message);

    return '';
}

上記は、null 以外の応答を返す限り機能します。

ただし、同じことを行うが、次のようなリダイレクトを使用すると:

function foo() {

    // ... 

    $message = \Swift_Message::newInstance()
        ->setSubject($subject)
        ->setFrom($sender)
        ->setTo($recipient)
        ->setBody(strip_tags($html))
        ->addPart($html, 'text/html');
    $result = $this->app['mailer']->send($message);

    simpleredirect($this->app['paths']['root']);
}

その後、メッセージは送信されません。

注: このsimpleredirect()関数は、標準的な方法でスクリプトを終了します。

どちらの例でも、$resultは指定された受信者の数として返されます。したがって、メールがキューに入れられていて、ある種のディスパッチが従来のリターンで実行され、リダイレクトの存在下で見逃されているとしか思えません。

SwiftMailerspoolオプションが有効になっているような気がします。ただし、Bolt プロジェクトをいくつか検索しても、どこにも設定されていないようです。スプーリングが有効になっている場合、電子メールはカーネル終了フェーズまで送信されません。これはリダイレクトdieによって回避されます)。

4

2 に答える 2

0

returnを前に置きsimpleredirectます。Responseこれは、すべてのコントローラー アクションがオブジェクトを返す必要があるため必要です。

の場合return ''、Symfony 自体がResponseオブジェクトを作成します。

于 2014-10-31T12:36:04.073 に答える