При разработке веб-приложений почти всегда мы хотим начинать с какой-то готовой базы и прикручивать необходимый функционал с удобством для разработчика. Особенно для начинающего разработчика полезно смотреть готовые проекты. Фреймворки, в частности Symfony2, предоставляют очень много инструментов, чтобы сделать разработку приложений приятной. Но среди множества бандлов (модулей Symfony2 приложений) бывает тяжело понять, какой набор стоит выбрать.
У каждой компании, имеющей некоторый опыт разработки на Symfony2, скорее всего имеется свой минимальный каркас для старта, но в статье мы посмотрим на варианты, находящиеся в открытом доступе.
Статья подойдет читателям, только начинающим знакомство с Symfony2. А людей, активно использующих этот фреймворк, попрошу поделиться замечаниями.
Каждую демку будем описывать в следующем формате:
Symfony2 приложение, которое предоставляется сообществом Symfony2 в качестве примера приложения. Для того чтобы разработка была комфортной и быстрой в любом случае понадобится искать и добавлять еще бандлы (в зависимости от преследуемой цели). Каркас подходит для ознакомления с ядром фреймворка, структурой приложения.
Создан AppBundle, в котором можно начать работать (хотя структуру бандла легко генерировать с помощью php ./app/console generate:bundle). В качестве шаблонизатора используется twig (можно заменить на другой). Используется Doctrine ORM/DBAL и Doctrine PHPCR-ODM, настроен Swiftmailer, включены аннотации.
Не обнаружено.
Смысл сборки состоит в том, чтобы облегчить разработчику добавление функциональности CMS в приложение. Основные принципы для имеющихся бандлов: масштабируемость, удобство, хорошая документация и хорошее покрытие тестами. Реализуется идея слабосвязанной CMS (decoupling CMS decoupledcms.org).
Подробный разбор можно прочитать по ссылке «Symfony CMF. Часть 2 и последняя» за авторством waitekk.
Не обнаружено.
Пошаговое построение представлено в туториале.
REST API построить не так просто. В этом пункте приводится пример приложения с построенным REST API.
Реализован пример api к блогу. Обработчик запросов и его интерфейс вынесены в отдельные классы, модель представлена в виде интерфейса из геттеров и сеттеров реализуемых сущностью Page. Разделение ответственности классов позволяет писать более качественный код.
Для настройки безопасности необходи дополнительный слой, например, бандл, позволяющий использовать Oauth2 (HWIOAuthBundle).
Реализация LINK/UNLINK сложная для запоминания.
Метод PATCH может быть разнообразным (некоторые рекомендации ).
Кроме базы в виде Symfony Standard Edition
Не обнаружено.
Каркас приложения подготовленный и используемый компанией Evercode.
Одной из особенностей является настроенный файл конфигурации развертывания (capifony) и есть настройки подключения HipChat для оповещения о статусе развертывания и отправки сообщений логов о критических ошибках.
[ Источник ]
При использовании capifony возможно потребуется подправить:
Чтобы демонстрировать работу бандлов проекта sonata было создано такое вебприложение — магазин с богатым функционалом.
Может существенно упростить решение многих типичных задач ( разметка страницы, создание админки и другого функционала CMS, управление медиа файлами и т. д.), но требует существенных затрат времени на ознакомление, потому что документация могла быть лучше.
Большое количество бандлов, и многие из них являются вспомогательными (зависимости), поэтому привожу лишь наиболее интересные с точки зрения создания конечной функциональности.
Особых трудностей нет, приложение поддерживается в работоспособном состоянии.
Бандл значительно уменьшающий количество кода, требуемого для выполнения стандартных задач ( отправка почты, флэш сообщения, авторегистрация сервисов, создание форм). Еще есть помощник создания отсутствующих шаблонов view, если шаблон не был найден, то его можно создать сразу в браузере прямо на в форме на странице ошибки.
Из недостатков небольшое сообщество и необходимость в дополнительном изучении.
Кроме того SensioGeneratorBundle хорошо справляется с генерацией Bundle, Controller, CRUD, Entity, FormType. И его использование более понятно, чем сокрытие этого кода KnpRadBundle'ом.
[ Wiki проекта ]
Проблем нет.
На основе Symfony SE создается простой блог. По ссылке на источник есть пошаговое описание процесса создания, но лучше ориентироваться на Sonata sandbox, в рамках которого тоже реализован небольшой блог. Лучше в том смысле, что в проекте Sonata происходят постоянные обновления демки.
[ Источник ]
Используется только Symfony SE.
Этому уроку уже несколько лет и используется старая версия Symfony2 (2.0.3). Даже не используется composer.
У каждой компании, имеющей некоторый опыт разработки на Symfony2, скорее всего имеется свой минимальный каркас для старта, но в статье мы посмотрим на варианты, находящиеся в открытом доступе.
Статья подойдет читателям, только начинающим знакомство с Symfony2. А людей, активно использующих этот фреймворк, попрошу поделиться замечаниями.
Каждую демку будем описывать в следующем формате:
- Название
- Описание
- Установка
- Основные бандлы
- Встречающиеся трудности при развертке
Содержание
- Symfony Standard Edition
- Symfony Content Management Framework
- REST API
- Evercodelab skeleton
- Sonata Sandbox
- Knp RAD project
- Symfony2 blog
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 | значительно облегчает загрузку и последующее использование загруженных файлов |
кеширование, изменение размера и прочие необходимые операции над изображениями. Чаще всего использутеся для создания превью для фотографий | |
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.