Страницы

Поиск по вопросам

воскресенье, 2 февраля 2020 г.

Правильный подход к организации хранения routes в Symfony

#php #symfony2


Здравствуйте!

В данный момент я изучаю Symfony 2 и предо мной встала такая дилема:

Как лучше хранить routes для контроллеров?

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

Приведу свои размышления:

Насколько мне известно, Symfony имеет 2 основных варианта хранения routes


В конфигах (routing.yml, routing.xml и тд), возможно также подключать routing из бандлов.
В аннотациях


Наиболее удобным мне кажется вариант с аннотациями, но когда контроллеров и методов
станет много, скажем 50+, возникнет сложность определения что и где находится, и как
следствие усложнение разработки и дебага.

Также приемлемым мне кажется складывать routes в routing файлы каждого бандла. В
этом случае будет удобно повторно использовать бандлы в других проектах, и зная за
какой функционал отвечает определенный бандл, искать нужные роуты. Но все же при большом
количестве бандлов это может стать проблемой. 

Третий вариант - это хранить все роуты в app/config/routing.yml. Но это усложнит
повторное использование бандлов. И, почему-то, мне этот вариант интуитивно не нравится.

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

Буду рад и благодарен любому мнений, и в двойне - мнению аргументированному.
    


Ответы

Ответ 1



Использую Symfony два года, на 4 проектах. В первых двух использовал конфигурирование маршрутов в yaml-файле, на третьем решил попробовать аннотации. Понял, что использование аннотаций гораздо удобнее, хотя поначалу думал "как хорошо когда все маршруты в одном файле". Совсем наоборот. Как минимум, при создании нового контроллера приходится что-то делать в двух файлах, а с аннотациями - ctrl+c - ctrl+v в одном файле, чуть переименовал и готово. Если строго следовать именованию файлов и маршрутов - никаких проблем с нахождением нужного контроллера не возникает. Тем более в IDE, где просто по имени роута в шаблоне тыкнул и ты уже в контроллере. С точки зрения производительности: на первом проекте активно курил доки и рекомендации с аналогичным вашему вопросом. Вычитал где-то, что yaml-файлы производительнее. Но на деле никакой заметной разницы нет, все в любом случае хорошо кешируется и готово к употреблению движком "в лучшем виде". Добавлю еще, что проекты достаточно крупные, чтобы различия в использовании подходов были заметны. Так вот с yaml-файлом неприятнее: огромная портянка на 1.5к строк, в которой и нужное и ненужное и хочется еще соблюдать какой-то порядок и разделять комментами на разделы, чтобы приличнее было... А с аннотациями все на своем месте, всегда под рукой, никакой каши.

Ответ 2



Сами разработчики в своих Best Practice предлагают использовать конфигурирование маршрутов, кэширования и безопасности через аннотации: Make your controller extend the FrameworkBundle base controller and use annotations to configure routing, caching and security whenever possible. и я с ними полностью согласен. Очень удобно, когда конфигурация находится в одном месте с кодом, а по быстродействию - нет никакой разницы. In addition, using annotations for routing, caching and security simplifies configuration. You don't need to browse tens of files created with different formats (YAML, XML, PHP): all the configuration is just where you need it and it only uses one format.

Комментариев нет:

Отправить комментарий