При разработке веб-приложений почти всегда мы хотим начинать с какой-то готовой базы и прикручивать необходимый функционал с удобством для разработчика. Особенно для начинающего разработчика полезно смотреть готовые проекты. Фреймворки, в частности Symfony2, предоставляют очень много инструментов, чтобы сделать разработку приложений приятной. Но среди множества бандлов (модулей Symfony2 приложений) бывает тяжело понять, какой набор стоит выбрать.

У каждой компании, имеющей некоторый опыт разработки на Symfony2, скорее всего имеется свой минимальный каркас для старта, но в статье мы посмотрим на варианты, находящиеся в открытом доступе.

Статья подойдет читателям, только начинающим знакомство с Symfony2. А людей, активно использующих этот фреймворк, попрошу поделиться замечаниями.

Каждую демку будем описывать в следующем формате:
  1. Название
  2. Описание
  3. Установка
  4. Основные бандлы
  5. Встречающиеся трудности при развертке

Содержание




Symfony Standard Edition


Описание


Symfony2 приложение, которое предоставляется сообществом Symfony2 в качестве примера приложения. Для того чтобы разработка была комфортной и быстрой в любом случае понадобится искать и добавлять еще бандлы (в зависимости от преследуемой цели). Каркас подходит для ознакомления с ядром фреймворка, структурой приложения.

Создан AppBundle, в котором можно начать работать (хотя структуру бандла легко генерировать с помощью php ./app/console generate:bundle). В качестве шаблонизатора используется twig (можно заменить на другой). Используется Doctrine ORM/DBAL и Doctrine PHPCR-ODM, настроен Swiftmailer, включены аннотации.

Установка


Composer composer create-project symfony/framework-standard-edition my_project_name
Symfony symfony new my_project_name

Основные бандлы


Таблица с названиями и кратким описанием
FrameworkBundle основа
SensioFrameworkExtraBundle добавляет несколько аннотаций, которые позволяют значительно упростить контроллеры, вплоть до того что вся логика контроллера будет записана в аннотациях.
DoctrineBundle поддержка doctrine dbal & orm
TwigBundle поддержка шаблонизатора и некоторых расширений
SecurityBundle Общие принципы работы разжеваны pluseg в статье Symfony2\SecurityBundle
AsseticBundle управление js, css, картинки, иконки
SensioGeneratorBundle добавляет команды для генерации кода
WebProfilerBundle панель отладки в окружениях разработки и тестирования
SensioDistributionBundle composer hooks, web конфигуратор, security checker. Используется в окружениях разработки и тестирования (dev/test)
SwiftmailerBundle поддержка библиотека для отправки писем
MonologBundle поддержка библиотеки Monolog для логирования


Встречающиеся трудности при развертке


Не обнаружено.

Symfony CMF


Описание


Смысл сборки состоит в том, чтобы облегчить разработчику добавление функциональности CMS в приложение. Основные принципы для имеющихся бандлов: масштабируемость, удобство, хорошая документация и хорошее покрытие тестами. Реализуется идея слабосвязанной CMS (decoupling CMS decoupledcms.org).

Подробный разбор можно прочитать по ссылке «Symfony CMF. Часть 2 и последняя» за авторством waitekk.

Установка


Composer $composer create-project symfony-cmf/standard-edition
$composer install
Git $git clone git://github.com/symfony-cmf/standard-edition.git <path-to-install>
$ cd <path-to-install>
$composer install

Основные бандлы


Таблица с названиями и кратким описанием
BlockBundle интегрирует PHPCR c SonataBlockBundle
CoreBundle предоставляет общие методы хэлперы для отображения контента
ContentBundle предоставляет базовые классы для определения контента, например основа каждого документа класс StaticContent , содержащий название, тело, информацию о публикации и ссылку на родительский документ для поддержания иерархической структуры типа PHPCR
CreateBundle интеграция create.js — функционального вебинтерфейса для редактирования страниц, использующих RDFa аннотации. Короче, позволяет редактировать опредлененные элементы страницы прямо на опубликованной странице, не переходя к административной части сайта.
MediaBundle Позволяет организовать управление медиафайлами от картинок и бинарных документов(как pdf) до видео и mp3. Но это требует некоторых дополнительных усилий, т.к. в бандле реализовано управление только для картинок и файлов.
MenuBundle интегрирует PHPCR c KnpMenuBundle
RoutingBundle расширяет возможности роутера, позволяет создавать контроллеры для перенаправлений и создавать маршруты в зависимости от расположения документа в PHPCR
SearchBundle поиск по сайту
SeoBundle рализован в виде надстройки над SonataSeoBundle
SimpleCmsBundle Позволяет отображать контент, маршруты, элементы меню, образующие дерево в PHPCR
SonataDoctrinePhpcrAdminBundle
интеграция SonataAdminBundle с PHPCR



Встречающиеся трудности при развертке


Не обнаружено.

REST API


Описание


Пошаговое построение представлено в туториале.

REST API построить не так просто. В этом пункте приводится пример приложения с построенным REST API.
Реализован пример api к блогу. Обработчик запросов и его интерфейс вынесены в отдельные классы, модель представлена в виде интерфейса из геттеров и сеттеров реализуемых сущностью Page. Разделение ответственности классов позволяет писать более качественный код.

Для настройки безопасности необходи дополнительный слой, например, бандл, позволяющий использовать Oauth2 (HWIOAuthBundle).

Реализация LINK/UNLINK сложная для запоминания.

Метод PATCH может быть разнообразным (некоторые рекомендации ).

Установка


Composer $ curl -s getcomposer.org/installer | php
$ php composer.phar create-project liuggio/symfony2-rest-api-the-best-2013-way -sdev
$ cd blog-rest-symfony2
Git Git clone github.com/liuggio/symfony2-rest-api-the-best-2013-way.git

Основные бандлы


Кроме базы в виде Symfony Standard Edition
Таблица с названиями и кратким описанием
FOSRestBundle создает все необходимые маршруты по конфигурации (YAML или XML) и отображает на соответствующие методы
JMSSerializerBundle нужен для сериализации ответов в json, xml
NelmioApiDocBundle генерация документации ко всем методам API, записывается в виде аннотаций.


Встречающиеся трудности при развертке


Не обнаружено.

Evercodelab skeleton


Описание


Каркас приложения подготовленный и используемый компанией Evercode.
Одной из особенностей является настроенный файл конфигурации развертывания (capifony) и есть настройки подключения HipChat для оповещения о статусе развертывания и отправки сообщений логов о критических ошибках.

[ Источник ]

Установка


Composer composer.phar create-project evercode/symfony-skeleton path/ dev-master
Git git clone git@github.com:EvercodeLab/symfony-skeleton.git path/

Основные бандлы


Таблица с названиями и кратким описанием
GedmoDoctrineExtensions расширение возможностей Doctrine. Добавляет такие необходимые вещи как Timestampable для автоматической простановки дат при добавлении и обновлении записи в базе данных, а также Tree для возможности работы с деревьями.
DoctrineFixturesBundle работа с фикстурами для базы данных. Очень сильно упрощает жизнь на этапе разработки, когда необходимо постоянно генерировать какую-то тестовую информацию.
DoctrineMigrationsBudnle генерирует миграции на основе отличий базы данных от мапинга сущностей. Пожалуй самый нужный и важный бандл, без которого разработка была бы намного сложнее.
FosUserBundle дает полный набор функционала для работы с пользователями: регистрация, авторизация и прочее в том же духе.
SonataAdminBundle дает функционал для создания административной части сайта: созданиеОсновные бандлы, редактирование, удаление данных, а так же различные дополнительные возможности, например, экспортирование данных в различные форматы. Сам по себе данный бандл имеет довольно гибкие возможности по настройке и кастомизации под свои нужды.
KnpMenuBundle бандл и библиотека для динамической генерации меню. В качестве путей использует роуты.
KnpPaginatorBundle создает динамическую постраничную навигацию для сайта.
FOSRestBundle данный бандл предоставляет набор инструментов для быстрой разработки RESTful API и приложений.
VichUploaderBundle значительно облегчает загрузку и последующее использование загруженных файлов
AvalancheImagineBundle — deprecated, лучше использовать LiipImagineBundle кеширование, изменение размера и прочие необходимые операции над изображениями. Чаще всего использутеся для создания превью для фотографий
EvercodePageBundle
небольшой бандл для работы с контентными страницами. Работает совместно с SonataAdminBundle



Встречающиеся трудности при развертке


При использовании capifony возможно потребуется подправить:
  • права на /web, ./app/cache, ./app/logs
  • Если используется параметр use :acl в deploy.rb, то на машине для развертки надо выполнить sudo apt-get install acl и добавить флаг acl для текущего раздела в \etc\fstab
  • Проследить за содержанием app/config/parameters.yml, потому что по умолчанию значения берутся из app/config/parameters.yml.dist


Sonata sandbox


Описание


Чтобы демонстрировать работу бандлов проекта sonata было создано такое вебприложение — магазин с богатым функционалом.

Может существенно упростить решение многих типичных задач ( разметка страницы, создание админки и другого функционала CMS, управление медиа файлами и т. д.), но требует существенных затрат времени на ознакомление, потому что документация могла быть лучше.

Установка


Composer $ curl -s getcomposer.org/installer | php
$ php composer.phar create-project sonata-project/sandbox:2.3.x-dev
или
$ DATABASE_NAME=sonata DATABASE_USER=root DATABASE_PASSWORD="" php composer.phar create-project sonata-project/sandbox:dev-2.4-develop
Archive $ curl -L github.com/sonata-project/sandbox-build/archive/2.3.tar.gz | tar xzv
$ cp app/config/parameters.yml.dist app/config/parameters.yml
Конфигурация БД
$ vim app/config/parameters.yml
загрузка данных
$ php bin/load_data.php

Основные бандлы


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

Таблица с названиями и кратким описанием
KnpGaufretteBundle бандл, предоставляет уровень абстракции над файловой системой, позволяет обращаться к файлам одинаково вне зависимости от хранилища (AWS, CloudStorage, … ). Если нижележащая файловая система медленная может еще кэшировать доступ к файлам.
DoctrineFixturesBundle работа с фикстурами для базы данных. Очень сильно упрощает жизнь на этапе разработки, когда необходимо постоянно генерировать какую-то тестовую информацию.
DoctrineMigrationsBudnle генерирует миграции на основе отличий базы данных от мапинга сущностей. Пожалуй самый нужный и важный бандл, без которого разработка была бы намного сложнее.
FosUserBundle дает полный набор функционала для работы с пользователями: регистрация, авторизация и прочее в том же духе.
SonataUserBundle интегрирует FOSUserBundle в SonataAdminProject
SonataAdminBundle дает функционал для создания административной части сайта: созданиеОсновные бандлы, редактирование, удаление данных, а так же различные дополнительные возможности, например, экспортирование данных в различные форматы. Сам по себе данный бандл имеет довольно гибкие возможности по настройке и кастомизации под свои нужды.
KnpMenuBundle бандл и библиотека для динамической генерации меню. В качестве путей использует роуты.
KnpPaginatorBundle создает динамическую постраничную навигацию для сайта.
FOSRestBundle данный бандл предоставляет набор инструментов для быстрой разработки RESTful API и приложений.
SonataPageBundle предоставляет управление к сущностям Site (набор Page), Page (бандл предоставляет несколько типов страниц и легче получать функциональность CMS для этих страниц), Block ( контентом управляют сервисы, а Block содержит id сервиса, положение на странице и некоторые найстройки сервиса), Cache ( к каждому блоку в зависимости от контента можно привязать кэширующий сервис)
SonataNewsBundle блог платформа на базе Doctrine2 и Symfony2, позволяет управлять видом маршрутов, форматированием текстов, комментариями
ecommerce
включает различные бандлы необходмые для торговли; Product, Price, Customer, Basket, Delivery, Order, Payment, Invoice
SonataCacheBundle
в отличие от других решений для кэширования в качестве имени сущености используется массив с некоторыми данными, вместо строки или самого объекта. И уже за бэкендом задача вычисления идентификатора по этому массиву. Интересное решение, но мне больше нравится <a href=«github.com/FriendsOfSymfony/FOSHttpCacheBundle>FOSHttpCacheBundle




Встречающиеся трудности при развертке


Особых трудностей нет, приложение поддерживается в работоспособном состоянии.


Knp RAD project


Описание


Бандл значительно уменьшающий количество кода, требуемого для выполнения стандартных задач ( отправка почты, флэш сообщения, авторегистрация сервисов, создание форм). Еще есть помощник создания отсутствующих шаблонов view, если шаблон не был найден, то его можно создать сразу в браузере прямо на в форме на странице ошибки.

Из недостатков небольшое сообщество и необходимость в дополнительном изучении.
Кроме того SensioGeneratorBundle хорошо справляется с генерацией Bundle, Controller, CRUD, Entity, FormType. И его использование более понятно, чем сокрытие этого кода KnpRadBundle'ом.

[ Wiki проекта ]

Установка


Composer $ composer create-project -s dev --prefer-dist --dev knplabs/rad-edition knprad_project
$ cd knprad_project

Основные бандлы


Таблица с названиями и кратким описанием
KnpRadBundle сам бандл, позволяющий сократить много кода (судя по примерам )
DoctrineFixturesBundle работа с фикстурами для базы данных. Очень сильно упрощает жизнь на этапе разработки, когда необходимо постоянно генерировать какую-то тестовую информацию.
MopaBootstrapBundle twig-шаблоны и расширения для более удобного использования twitter bootstrap
Behat + Mink Бандлы для тестирования, реализуют подход BDD (behavior-driven development).

Вместо BehatBundle лучше использовать: Symfony2Extension



Встречающиеся трудности при развертке


Проблем нет.

Symfony2 blog


Описание


На основе Symfony SE создается простой блог. По ссылке на источник есть пошаговое описание процесса создания, но лучше ориентироваться на Sonata sandbox, в рамках которого тоже реализован небольшой блог. Лучше в том смысле, что в проекте Sonata происходят постоянные обновления демки.

[ Источник ]

Установка


Git $ git clone github.com/dsyph3r/symblog.git
$ cd symblog

Основные бандлы


Используется только Symfony SE.

Встречающиеся трудности при развертке


Этому уроку уже несколько лет и используется старая версия Symfony2 (2.0.3). Даже не используется composer.

Комментарии (7)


  1. Tramvai
    13.07.2015 20:34

    Я бы еще посоветовал посмотреть на это чудо техники для общего развития: github.com/orocrm/platform
    Вот список бандлов: github.com/orocrm/platform/tree/master/src/Oro/Bundle


    1. StormGuard Автор
      14.07.2015 10:26

      Спасибо, интересная наводка. Можно подсмотреть много различных аспектов. На всякий случай оставлю ссылку на приложение, используеющее эту платформу github.com/orocrm/crm-application. Лично я не сразу нашел, как легко развернуть эту платформу. =)


      1. Tramvai
        14.07.2015 19:43

        Продукт явно еще сыроват и с документацией беда, но ребята стараются. Если заглянуть под капот, то виглядит ниче так. По ходу бывшие из Magento пилят.


        1. hanovruslan
          20.07.2015 10:19

          А что, magento — всё?


  1. maxlips
    14.07.2015 14:02
    +1

    Про установку, есть возможность добавить в конце версию:

    symfony new my_project_name 2.7.1
    


    Или вот так:

    symfony new my_project_name 2.6
    


    В таком варианте будет установлена последняя версия 2.6.9


  1. sunsey
    23.07.2015 15:32

    спасибо за список,
    я бы добавил еще demo blog application от самих симфони девов с best practices
    symfony.com/blog/introducing-the-symfony-demo-application


  1. danaki
    10.08.2015 17:30

    Как Knp RAD делает авторегистрацию сервисов? Мне больше ничего не нужно, надоело руками вписывать. Кто подскажет?