При разработке веб-приложений почти всегда мы хотим начинать с какой-то готовой базы и прикручивать необходимый функционал с удобством для разработчика. Особенно для начинающего разработчика полезно смотреть готовые проекты. Фреймворки, в частности Symfony2, предоставляют очень много инструментов, чтобы сделать разработку приложений приятной. Но среди множества бандлов (модулей Symfony2 приложений) бывает тяжело понять, какой набор стоит выбрать.
У каждой компании имеющей некоторый опыт разработки на 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.
ссылка на оригинал статьи http://habrahabr.ru/post/262453/
Добавить комментарий