Использование исключения для редиректа/возврата результата в Symfony 2
Всем доброго времени суток!
Насколько я понял, в Symfony 2 нет нативной возможности вернуть Response из сервиса, либо из вложенной функции. Всегда должна быть проверка в основном методе Action'а и возврат результата из него.
Это очень неудобно, например, когда есть сервис, который выполняет некоторую первоначальную инициализацию и, в результате проверки входных данных, может потребовать редиректа на другую страницу. Приходится во все методы контроллера, где выполняется инициализация, вставлять проверку на возвращаемое значение метода сервиса.
Решение есть, но оно мне кажется очень «кривым» (люблю, чтобы не только оформление кода было красивым, но и сам код не был «индусским»). Так вот, это решение — свой EventListener, свой Exception, при обработке которого будет вызываться редирект на нужную страницу.
Очень не нравится попытка «кататься по реке на велосипеде», но другого решения не вижу.
Возможно оно есть, так как мое изучение symfony еще продолжается.
P.S. Проводить первоначальную инициализацию в контроллере не вариант по той же причине, так как если она (инициализация) будет в функции, то надо будет каждый раз, в каждом Action-методе проверять результат этой функции и действовать согласно результату.
Возвращение методом либо Response либо, что то иное это тоже кривой подход.
Почему бы не подписаться на событие kernel.request, которое происходит до выполнения экшена в контроллере. И проверять входные данные, в случае если они не устраивают возвращать Response и тогда контроллер не будет вызываться.
Не может, потому что после отдачи reponse есть еще ряд событий (kernel.response, kernel.finish_request, kernel.terminate), которые могут быть использованы, а вы взяли и exit; написали.