抑制Symfony / Twig中的错误消息?

时间:2014-09-22 10:55:56

标签: symfony swiftmailer

如何在symfony controller / swift消息中抑制错误消息,例如如果用户的电子邮件不存在,则提示服务器出现问题,或者电子邮件地址根本不符合RFC 2822。

例如,我们遇到以下CRITICAL错误......

  

request.CRITICAL:Swift_RfcComplianceException:给定[xxx@xxx.com]的邮箱中的地址不符合RFC 2822,3.6.2。 (未被捕获的例外)在$

...然后用户会收到一个symfony错误页面"出现错误"在任何情况下我都需要压制。

一个简单的 @ $ this-&gt; get(&#39; mailer&#39;) - &gt; send($ message); 不幸地在这里工作...... < / p>

protected function generateEmail($name)
{
        $user = $this->getDoctrine()
            ->getRepository('XXX')
            ->findOneBy(array('name' => $name));

        if (!$user) {
            exit();
        }
        else {
            $message = \Swift_Message::newInstance()
            ->setSubject('xxx')
            ->setFrom(array('xxx@xxx.com' => 'xxx'))
            ->setTo($user->getEmail())
            ->setContentType('text/html')
            ->setBody(
                $this->renderView(
                    'AcmeBundle:Template:mail/confirmed.html.twig'
                )
            )
            ;
            $this->get('mailer')->send($message);
            // a simple @$this->get('mailer')->send($message); doesn't work here
        }

    return true;
}

2 个答案:

答案 0 :(得分:4)

要简单地抑制错误,请将send方法包装在try-catch块中。明智地选择例外类型。以下示例仅捕获Swift_RfcComplicanceExceptions

try {
    $this->get('mailer')->send($message);
} catch (\Swift_RfcComplianceException $exception) {
    // do something like proper error handling or log this error somewhere
}

我认为事先应用一些验证是合理的,因此您可以向用户显示一个不错的错误。

答案 1 :(得分:1)

我不确定try catch块是否有效,因为邮件可能会在请求过程中稍后发送:http://symfony.com/fr/doc/current/components/http_kernel/introduction.html#l-evenement-kernel-terminate

如果使用框架Full Stack版本,则这是默认行为。

我在这里也发现了一些参考:Unable to send e-mail from within custom Symfony2 command but can from elsewhere in app

您可以在配置中更改Swiftmailer假脱机策略以发送直接邮件......