Новое приложение — это всегда праздник! Только если оно не на Bitrix, конечно. Новые возможности, интересные решения и задачи. Однако, как все мы понимаем, при разработке бывают моменты, которые повторяются от раза к разу и которые за счёт своей рутинности способны несколько омрачить радость создания чего-то нового.

В Evercode Lab мы постоянно думаем над тем, как упростить себе жизнь, в том числе и как уйти от рутинности. В нашем блоге мы уже несколько раз писал на данную тему (Тесты с Rutester, В одну команду, Сниппеты в Sublime Text 2 для Symfony2 и Ruby on Rails). Сегодня мы расскажем о другой нашей внутренней наработке — Symfony-Skeleton. Это скелет Symfony2 приложения, заточенный под наши нужды и наш workflow.

Он собран на основе версии Symfony 2.3 и содержит плагины, которые мы используем в 90% тех приложений, которые мы разрабатываем:

  • GedmoDoctrineExtensions — расширение возможностей Doctrine. Добавляет такие необходимые вещи как Timestampable для автоматической простановки дат при добавлении и обновлении записи в базе данных, а также Tree для возможности работы с деревьями.
  • DoctrineFixturesBundle — работа с фикстурами для базы данных. Очень сильно упрощает жизнь на этапе разработки, когда необходимо постоянно генерировать какую-то тестовую информацию.
  • DoctrineMigrationsBudnle — генерирует миграции на основе отличий базы данных от мапинга сущностей. Пожауй самый нужынй и важный бандл, без которого разработка была бы намного сложнее.
  • FosUserBundle — дает полный набор функционала для работы с пользователями: регистрация, авторизация и прочее в том же духе.
  • SonataAdminBundle — дает функционал для создания административной части сайта: создание, редактирование, удаление данных, а так же различные дополнительные возможности, например, экспортирование данных в различные форматы. Сам по себе данный бандл имеет довольно гибкие возможности по настройке и кастомизации под свои нужды.

Кроме этих 5 бандлов, которые мы используем в каждом проекте, есть еще несколько, которые мы используем регулярно, но не постоянно. О них вкратце:

  • KnpMenuBundle — бандл и библиотека для динамической генерации меню. В качестве путей использует роуты.
  • KnpPaginatorBundle — создает динамическую постраничную навигацию для сайта.
  • FOSRestBundle — данный бандл предоставляет набор инструментов для быстрой разработки RESTful API и приложений.
  • VichUploaderBundle — значительно облегчает загрузку и последующее использование загруженных файлов.
  • AvalancheImagineBundle — кеширование, изменение размера и прочие необходимые операции над изображениями. Чаще всего использутеся для создания превью для фотографий.
  • EvercodePageBundle — наш небольшой бандл для работы с контентными страницами. Работает совместно с SonataAdminBundle.

Установка

Для установки можно воспользоваться несколькими возможностями. Первая из которых — composer:


composer.phar create-project evercode/symfony-skeleton path/ dev-master

Вторая воспользоваться клонированием с github:


git clone [email protected]:EvercodeLab/symfony-skeleton.git path/

В обоих случаях path это путь, куда будет устанавливаться новый проект.

Следующие действия идентичны для обоих вариантов, нам необходимо запустить установочный скрипт, который сделает за нас большую часть работы:


bin/setup

Скрипт выполняет следующие действия:

  • Создает необходимые директории (app/cache и app/logs) и выставляет права на них (в этом месте установочный скрипт может запросить у вас пароль для sudo, так как установка прав на папки идет от имени администратора)
  • Скачивает, если необходимо, composer, после чего происходит установка вендоров.
  • Создает базу данных и прогоняются необходимые действия для придания ей рабочего вида (миграции и загрузка фикстур).

Следует учесть, что данный скрипт тестировался на OS X, по этому его работа в остальных операционных системах, на данный момент, не гарантируется.

Всё, теперь наш проект готов к работе!

Запуск проекта

После того как все установлено у нас есть несколько вариантов: или мы можем настроить локальный сервер на работу с новым проектом (если вы еще не знаете как, почитайте документацию), или же воспользоваться более простым вариантом — встроенным веб сервером PHP (тут мы конечно же подразумеваем, что у PHP версии не ниже 5.4). Для этого просто запускаем команду:


bin/start

Будет запущен тестовый сервер с адресом http://localhost и диапазоном портов от 8000 до 8010, в зависимости от того, какие порты уже заняты, а какие свободны.

Если нам при запуске необходимо провести обновление, то мы можем запустить команду с опцией —update.

А как же тесты?

Они так же имеются. На данный момент по умолчаню есть две возможности — использовать PHPUnit или же Behat + Mink.

В случае первого, подразумевается, что PHPUnit установлен глобально, через PEAR. В случае Behat, все необходимые пакеты ставятся автоматически через composer при установке проекта. В самом skeleton уже представлены простейшие тесты обоих типов. Запустить их можно с помощью комманд: bin/behat и phpunit -c app/.

И это еще не всё!

Все вы знаете ситуацию, когда сапожник и без сапог. Так вот, это не про нас. У нас есть замечательный сайт — evercodelab.com. Кроме его замечательности как такового, он еще хорош тем, что выложен в открытый доступ на github и выполняет функцию не только сайта нашей компании, но еще и примера хороших практик для нас и наших клиентов. Для оценки качества кода, мы используем SensioLabsInsight.

А теперь всё.

Если у вас возникнут какие-то вопросы по нашему Skeleton’у, то смело задавайте их или в комментариях к посту, или в issues к проекту на github.

Приятного использования и лёгкой работы!