banderos120
@banderos120
Играю на балалайке

Как обойти дублирование кода в контроллере Symfony2?

Здравствуйте.
Вопрос следующий. Есть ссылки для обращения к ресурсам. Ресурсы имеют некую иерархию, например, ссылка будет иметь следующий вид:
/cart/{cartId}/product/{productId}

И соответственно, у нас есть методы GET, POST, PUT, PATCH, DELETE. При каждом запросе к Action-ам, нам необходимо проверять есть ли корзина с таким ID, есть ли продукт с таким ID, имею ли я право работать с продуктом и т.д., а при несоответствии условию кидается HTTPException.
Вот и назрел вопрос, чтобы не дублировать код по Action-методам контроллеров, каким образом лучше сделать такую предпроверку типичных условий ?
Были мысли вынести все в обычный менеджер, но не думаю, что бросание HTTPException-ов менеджером хорошая идея. Также думал вынести такую проверку в RequestListener, но пока смутно представляю, как такое будет работать. На данный момент типовые проверки вынес в трейты, а контроллер имплементировал от интерфейса с методами, как в трейте.
Есть ли какое-то наиболее подходящее решение данной проблемы ?
  • Вопрос задан
  • 339 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Были мысли вынести все в обычный менеджер, но не думаю, что бросание HTTPException-ов менеджером хорошая идея.


Да, потому есть такая штука у FosRestBundle как ErrorController который умеет конвертить обычные исключения в корректный респонс со своими статус кодами.

Вынести все эти штуки в ваш сервис-менеджер, что бы вся бизнес логика была рядом, это здравая мысль.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
voronkovich
@voronkovich
Ваши проверки можно вынести в аннотации.
Для проверки, существует ли сущность с нужным id, можно использовать аннотацию @ParamConverter
Для проверки прав доступа можно использовать @Security
Все исключения будут бросаться автоматически.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы