Советы при разработке на Symfony2
...по мотивам доклада Романа Лапина на конференции PHP Frameworks Day 2013 - "Как превратить проект на Symfony 2 в боль". С некоторыми ошибками ведения проекта на Symfony 2 скорее всего вы уже сталкивались в процессе разработки первого проекта или в самом начале изучения этого фреймворка. Добрую часть ошибок я допускал при первом знакомстве с Symfony 2, но все же доклад стоит посмотреть.
Роман Лапин - Как превратить проект на Symfony 2 в боль
Собственно - советы:
- Добавьте в .gitignore на системном уровне каталог .idea/, файлы *.DS_Store, *.iml;
- Не забывайте в каждом проекте добавлять в .gitignore следующие файлы: vendors/, parameters.yml;
- Не меняйте дефолтную структуру файлов и каталогов без крайней необходимости!
- Окружение не должно зависеть от "машины", на которой вы запускаете проект. Окружение - это определенная конфигурация проекта в момент его запуска. Если конфигурация зависит от машины - используйте свой локальный app/config/parameters.yml который нужно добавите в .gitignore;
- Также не завязывайте приложение на конкретное окружение в коде! Не нужно проверять окружение в самом коде - лучше использовать параметры предопределенные для нужного окружения.
- Не изменяйте исходный код в каталоге vendors/! Воспринимайте vendors/ как черный ящик. Ваше приложение должно знать только о файле автозагрузки - vendor/autoload.php. При необходимости используйте namespace для подмены пути к переопределенному классу;
- Не добавляйте в .gitignore файл composer.lock - вам нужно знать историю работоспособной связки всех зависимостей;
- Не делайте composer update на продакшене! На локалке лучше обновлять зависимости пошагово и прогонять тесты (надеюсь они у вас есть) после обновления нужной зависимости;
- Не суньте в post-install composer'а то, что там не нужно!
- Не используйте системный временный каталог /tmp для логов/кеша - у каждого проекта на Symfony 2 должен быть отдельный каталог для логов и кеша;
- Не нужно без крайней необходимости инжектить @service_container в каждую зависимость, ведь можно заинжектить только конкретные необходимые для каждого класса зависимости (если их не вагончик);
- Вместо инжекта в класс @security_context для определения прав доступа, проверьте права в контроллере и выполните нужное/доступное действие. Так вы сможете использовать этот класс в консоли, которая ничего не знает по @security_context;
- Не используйте ACL. Она довольно сложна и может вызвать нежелательную нагрузку. Используйте Voters:
$this->sc->isGranted(...);
Voters также упростит последующие модификации прав доступа.
- Вычищайте все лишнее после кодо-генерации контроллеров!
- Будьте вежливыми - используйте фикс код стайла:
bin/php-cs-fixer fix src
- Помните о нежелательных:
- Fat Controllers - контроллер должен выполнять самый минимум действий: принял запрос, инициализировал сервис, вызвал метод, отдал ответ;
- Tight Coupling;
- Code Immobility;
- Заведите README.md!
- ...продолжаем делать проекты на Symfony 2 лучше
Источник: 1
04.11.2013 11:15
Комментарии
Комментариев пока нет.