Новое приложение — это всегда праздник! Только если оно не на 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.
Приятного использования и лёгкой работы!