Symfony2 регистрирует 404 ошибки

Мне нужно иметь возможность регистрировать/получать электронное письмо при возникновении ошибки 404. В документах я вижу, как настроить новый шаблон для этих ошибок, но как мне отловить их в первую очередь в моем контроллере, чтобы я мог реализовать логику регистрации/отправки по электронной почте?


person Jeremy Hicks    schedule 16.08.2011    source источник


Ответы (1)


Может быть, добавление прослушивателя событий, прослушивающего событие kernel.exception, поможет? Проверьте http://symfony.com/doc/current/book/internals.html#kernel-exception-event вместе с http://symfony.com/doc/current/reference/dic_tags.html#dic-tags-kernel-event-listener

Небольшой пример:

1) Создайте собственный прослушиватель

//bundles/Acme/AcmeBundle/Listener/CustomListener.php

namespace Acme\AcmeBundle\Listener;
use Symfony\Component\EventDispatcher\Event;

public class CustomListener {
    public function onKernelException(Event $event) {
        //Get hold of the exception
        $exception = $event->getException();
        //Do the logging
        // ...
    }
}

2) Добавьте слушателя в свой конфиг

//config.yml
services:
    kernel.listener.your_listener_name:
        class: Acme\AcmeBundle\Listener\CustomListener
        tags:
            - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }

Чтобы заполучить службы ведения журналов или рассылки (Swiftmailer), вы можете внедрить их в прослушиватель (http://symfony.com/doc/current/book/service_container.html#reference-injecting-services)

person Manne W    schedule 16.08.2011
comment
Это маршрут, по которому я в итоге пошел. Теперь мне просто нужно разобраться с сервисной инъекцией. Я использую GetResponseForExceptionEvent в качестве конкретного типа события — правильно ли его использовать? - person Jeremy Hicks; 17.08.2011
comment
GetResponseForExceptionEvent - это тот, который вы должны использовать для исключения. И могу ли я предложить проверить, является ли ошибка 404? В противном случае вам будет отправлено все исключения (если вы хотите, вы можете использовать для этого конфигурацию Monolog). - person Ramon Kleiss; 16.04.2013