[Из песочницы] Хорошая практика в Symfony 2 (по личному опыту)

Доброго времени суток, уважаемые хабравчане. Сегодня увидел статью на хабре «Официальный гайд по лучшим практикам в Symfony» и понял, что мне есть что исправить добавить. К вашему вниманию список личных советов и объяснение к ним.Используйте по меньше аннотацийЛично я люблю аннотации, но с опытом понял, что они приносят некий дискомфорт. Дело в том, что всю конфигурацию перенести в аннотации нельзя. Остается 2 варианта: Максимум в файлах конфигурации (например yml); Немножко в файлы, немножко в аннотации. Если выбрать второй вариант, то при росте проекта получается каша. И в вашем коде аннотаций больше, чем логики. Отговорки по типу «так легче находить роуты» не принимаются. Так как если расскидывать файлы конфигураций правильно, ты всегда знаешь, где находятся роуты к определённым контроллерам. Я уже молчу про команды в консоли, по типу route: debug, и отладчик, в котором видно название екшена и имя роута.Плохой пример (как по мне):

365657e17d334b608ba1f47995c3591b.png

Менеджеры и репозитории выносить в отдельные папки Сразу приведу плохой пример, как устроено на текущем проекте: ccf846a99afd4144b51b9300d5e8536c.png

Все классы менеджеров должны быть в папке Manager, классы репозиториев Repository. Если этого не делать, то при появлении уже 5–10 сущностей со своими менеджерами и репозиториями жить становится «веселее».

В шаблонах всегда определяйте блоки с яваскриптом и стилями Всё просто. В каждой отдельной странице вы сможете переопределять и подгружаться будут всегда только те яваскрипты и стили, которые нужны. Так же советую в самом базовом шаблоне эти блоки оставить пустыми. А в бандлах при создании главного layout.html.twig их заполнять.Конфигурации бандлов хранить в AppBundle/Resources Даже если проект небольшой, изначально привыкайте хранить конфигурации бандлов в AppBundle/Resources/, а не в app/config. В app/ только ссылки. В основном это касается роутинга и сервисов.Entity описывать в файле конфигурации Сущности лучше описывать в конфигурации, например, в AppBundle/Resources/config/doctrine/Entity.orm.yml, и генерить с помощью команды doctrine: generate: entities, которая сама сгенерирует классы сущностей. Когда конфиги сущностей находятся в файлах, сами классы выглядят чище. Так же вы будете уверенны, что в них нет ошибок.Для тестов создавайте отдельную базу В файле parameters.test укажите параметры тестовой базы, в которую загружаете фикстуры. Так вы всегда будете уверенны, что тестируете одни и те же данные. Возможно, все так и делает, просто на текущем проекте я столкнулся с отсутствием такой практики.Конечно это всё банальные вещи, но есть люди, которые так не делают и из-за этого страдают мученики программисты, которые пишут после них.

Буду рад если кто-то напишет свои советы в комментариях.

© Habrahabr.ru