2014-09-22 2 views
2

Как я могу подавить сообщения об ошибках в сообщении контроллера symfony/swift, например. если адрес электронной почты пользователя не существует, то не так с сервером ФППМ или адрес электронной почты, просто не соответствует RFC 2822.Сообщения об ошибках Supress в Symfony/Twig?

Например, мы получили следующие критические ошибки ...

request.CRITICAL: Swift_RfcComplianceException: адрес в почтовом ящике, указанный [[email protected]] не соответствует RFC 2822, 3.6.2. (неперехваченное исключение) в размере

... пользователь затем получает страницу с ошибкой Symfony «Произошла ошибка», которую мне нужно подавить в любом случае.

Простой @ $ this-> get ('mailer') -> send ($ message); здесь не работает, к сожалению ...

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('[email protected]' => '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; 
} 

ответ

1

Я не уверен, что поймать блок попытки будет работать, потому что письма могут быть отправлены позже в процессе запроса: 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 в вашей конфигурации для отправки прямых почтовых рассылок ...

+0

Эй, Янн, это интересно, мне придется попробовать! – Mike

4

Чтобы просто подавить ошибку, перенесите метод отправки в блоке. Выберите тип исключения с умом. Следующий пример просто ловит Swift_RfcComplicanceExceptions.

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

Я бы рассмотреть его благоразумно применить некоторые проверки заранее, так что вы можете показать хорошую ошибку для вашего пользователя.

+0

Эй devsheeep, спасибо, в отношении к Yanns комментарий ниже, я Я попробую, если работает. Но ваш ответ мне кажется хорошим! – Mike

Смежные вопросы