- PVSM.RU - https://www.pvsm.ru -

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

Fabien Potencier, ментейнер Symfony несколько дней назад представил черновую версию гайда лучшх практик [1], для разработки приложений с использованием Symfony, как фреймворка (напомню, что также это набор независимых компонентов).

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

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

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

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

Автор: hell0w0rd

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/guide/71470

Ссылки в тексте:

[1] черновую версию гайда лучшх практик: http://symfony.com/doc/current/best_practices/index.html

[2] Composer: https://getcomposer.org/

[3] Twig: http://twig.sensiolabs.org/

[4] Assetic: https://github.com/kriswallsmith/assetic

[5] GruntJS: http://gruntjs.com/

[6] AngularJS: https://angularjs.org/

[7] Источник: http://habrahabr.ru/post/240187/