@Fly3110
web developer

Использование исключения для редиректа/возврата результата в Symfony 2

Всем доброго времени суток!

Насколько я понял, в Symfony 2 нет нативной возможности вернуть Response из сервиса, либо из вложенной функции. Всегда должна быть проверка в основном методе Action'а и возврат результата из него.

Это очень неудобно, например, когда есть сервис, который выполняет некоторую первоначальную инициализацию и, в результате проверки входных данных, может потребовать редиректа на другую страницу. Приходится во все методы контроллера, где выполняется инициализация, вставлять проверку на возвращаемое значение метода сервиса.

Решение есть, но оно мне кажется очень «кривым» (люблю, чтобы не только оформление кода было красивым, но и сам код не был «индусским»). Так вот, это решение — свой EventListener, свой Exception, при обработке которого будет вызываться редирект на нужную страницу.

Очень не нравится попытка «кататься по реке на велосипеде», но другого решения не вижу.
Возможно оно есть, так как мое изучение symfony еще продолжается.

P.S. Проводить первоначальную инициализацию в контроллере не вариант по той же причине, так как если она (инициализация) будет в функции, то надо будет каждый раз, в каждом Action-методе проверять результат этой функции и действовать согласно результату.
  • Вопрос задан
  • 3993 просмотра
Пригласить эксперта
Ответы на вопрос 2
@marliotto

Возвращение методом либо Response либо, что то иное это тоже кривой подход. Почему бы не подписаться на событие kernel.request, которое происходит до выполнения экшена в контроллере. И проверять входные данные, в случае если они не устраивают возвращать Response и тогда контроллер не будет вызываться.

Ответ написан
Комментировать
TrueDrago
@TrueDrago

А чем плох метод со своим EventListener'ом? Если нужен редирект, сервис его сделать напрямую не может вот так?


header( "Location: $Url" ); 
exit;

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы