Pull to refresh

Официальный гайд по лучшим практикам в Symfony

Reading time 3 min
Views 19K
Fabien Potencier, ментейнер Symfony несколько дней назад представил черновую версию гайда лучшх практик, для разработки приложений с использованием Symfony, как фреймворка (напомню, что также это набор независимых компонентов).
Мы знаем, как сложно отучиться от старых привычек и некоторые советы шокируют вас, но следуя им вы сможете разрабатывать приложения быстрее, сделать их менее сложными и в то же время более качественными.
В любом случае стоит помнить, что это всего лишь рекомендации и ваша команда не обязана им следовать. Вы можете продолжать использовать свои подходы, Symfony достаточно гибок для любых нужд и это никогда не изменится.

Под катом я выписал основные тезисы, большинство из них подробно аргументируется внутри книги, в некоторых «шокирующих» местах помимо тезиса есть небольшое объяснение.

  • Всегда используйте Composer для установки Symfony.
  • Создавайте только один бандл для логики приложения. Бандл — независимый компонент, который в дальнейшем можно переиспользовать. Например вашем приложении есть UserBundle и ProductBundle. Скорее всего ProductBundle не будет корректно работать без UserBundle, а это не правильно.
  • Параметры среды(база данных, логи) и приложения опишите в файле app/config/parameters.yml.
  • Параметры среды и приложения по умолчанию опишите в app/config/parameters.yml.dist.
  • Не меняющиеся параметры опишите в константах (прямо в app/config/parameters.yml).
  • Названия ваших сервисов должны быть как можно более коротки и просты, в идеале это должно быть одно слово (например slugger, geocoder).
  • Для определения сервисов приложения используйте YAML.
  • Используя Doctrine ORM, определяйте схему с помощью аннотаций. Все форматы конфигурации имеют одинаковую производительность.
  • Контроллеры приложения должны наследовать Symfony\Bundle\FrameworkBundle\Controller\Controller, использовать аннотации для роутинга и кеширования, когда это возможно.
  • Не используйте аннотацию @Template() для настройки шаблона, используемого контроллером. Аннотация полезна, но работает «магически», поэтому рекомендуется ее не использовать. Также использование этой аннотации замедляет ваше приложение на 21мс.
  • Используйте автоматическую конвертацию параметров, когда это полезно и удобно
    /**
    * @Route("/{id}", name="admin_post_show")
    */
    public function showAction(Post $post)
    

  • Для шаблонизации используйте Twig.
  • Храните ваши шаблоны в директории app/Resources/views/.
  • Для каждой формы создавайте класс.
  • Добавляйте кнопки в шаблоне, а не в PHP коде.
  • Для переводов используйте формат XLIFF.
  • Храните файлы переводов в app/Resources/translations/.
  • Всегда используйте ключевые слова для перевода, вместо текста. Например не Username, а label.username.
  • Если ваше приложение имеет два варианта авторизации, рекомендуется использовать один firewall, с включенным параметром anonymous.
  • Используйте алгоритм bcrypt для хеширования пользовательских паролей.
  • Для автоматической проверки прав доступа по URL используйте access_control. Когда возможно, используйте аннотацию @Security. В более сложных ситуациях используйте сервис security.context.
  • Храните статику(ассеты) в директории web/.
  • Используйте Assetic для обработки статики, или другие подобные инструменты, например GruntJS.
  • При использовании фронтенд-фреймворков, таких как AngularJS, вы должны отделить фронтенд и бекенд на два проекта.
  • Пишите как минимум функциональные тесты для проверки, что страницы приложения успешно загружаются. Хардкодьте URL страницы, вместо использования UrlGenerator.
Tags:
Hubs:
+20
Comments 47
Comments Comments 47

Articles