Vse o WEB
Информация и размышления о Web технологиях

Symfony 2 - Быстрый старт. Часть 2

Привет всем! Как и обещал, сегодня мы поговорим о некоторых полезных вещах, которые нужно знать при начале разработки  на Symfony.

 

Полезные бандлы

Кроме каркаса приложения, который нам предоставляет фреймоворк (как установить, читайте здесь), существует огромное количество бандлов, или готовых кусочков приложений, которые можно использовать в разных проектах. Как было сказано ранее, сам Symfony состоит из бандлов, но сообщество не дремлет и пишет новые :) Искать бандлы для своих нужд можно на https://packagist.org/ и http://knpbundles.com/. Здорово, когда все "велосипеды" уже собраны в одном месте. Но при виде всего разнообразия голова непременно пойдет кругом. Поэтому, я предлагаю вам ознакомиться со списком весьма полезных бандлов:

DoctrineFixturesBundle - если вам нужно наполнить сайт тестовой информацией, используйте этот бандл.

AliceBundle - расширенный бандл для работы с фикстурами. Очень полезная фишка - поддерживает загрузку с .yml файлов, а так же референсы, вызов методов и многое другое.

DoctrineMigrationBundle - бандл позволяет безопасно вносить изменения в структуру базы данных, сохраняя состояния до и после с возможностью откатов до нужной позиции. Очень полезно при деплое приложения.

StofDoctrineExtensionsBundle - подключает различные расширения для Doctrine: Translatable, Sluggable, Blameable, Tree etc.

DoctrineExtensions - добавляет к нестандартные DQL функции к Doctrine, такие как YEAR, MOHTH, DATE_FORMAT, DATEDIFF etc.

KnpMenuBundle - бандл для построения меню.

KnpPaginatorBundle - бандл для создания пагинации с удобной кастомизацией.

FOSUserBundle - этот бандл предназначен для управления всем, что касается пользователей. Здесь и авторизация, и регистрация, смена паролей и т.д. Немного перенагружен функционалом, но если вы хотите быстро и без проблем получить все эти фичи в приложение, то используйте.

FOSJsRoutingBundle - используем, если нужно указывать маршруты в javascript коде.

FOSElasticaBundle - интеграция Elasticsearch и Symfony framework. Реализует подключение, конфигурацию, написание запросов и фильтров.

HWIOauthBundle - бандл, который позволяет реализовать авторизацию через социальные сервисы.

SonataAdminBundle - если вы не хотите писать админку с нуля, то этот бандл вам весьма пригодится. Не все понятно сразу, но разобравшись, можно сделать хорошую и удобную админку.

BreadcrumbsBundle - бандл для создания "хлебных крошек". Комментарии излишни.

PrestaSitemapBundle - бандл для генерации карты сайта.

EkoFeedBundle - для построения (и чтения) RSS - фидов.

AnhSapeBundle - для интеграции с sape.

Guzzle - http клиент для простой посылки http запросов.

TwitterBootstrapBundle - для быстрой интеграции bootsrtap в ваш проект. Можно указывать необходимую версию.

Спасибо огромное создателю блога http://folkprog.net/ за основную часть этого списка :) Кстати, на хабре тоже есть интересная статья на эту тему.

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

 

$ composer require stof/doctrine-extensions-bundle

 

далее его необходимо подключить в файле app/AppKernel.php

 

// app/AppKernel.php

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            // ...

            new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
        );

        // ...
    }

    // ...
}

 

Обычно на страничке бандла есть подробное описание установки. Могут понадобиться дополнительные настройки в файле app/configs/config.yml.

 

Основные консольные команды

Начнем с двух вспомогательных команд:

$ php app/console list # список доступных команд 
$ php app/console help assetic:dump # помощь по команде

 

Первое, что вам может пригодится, это работа с кешем:

 

$ php app/console cache:clear             # очистка кеша для dev окружения
$ php app/console cache:clear --env=prod  # очистка кеша для prod окружения

$ php app/console cache:warmup            # подогрев кеша
$ php app/console cache:warmup --env=prod

 

Работаем со встроенные сервером:

 

$ php app/console server:run     # запуск сервера
$ php app/console server:start   # запуск сервера, как фонового процесса
$ php app/console server:status  # запрос статуса сервера
$ php app/console server:stop    # остановка сервера

 

Работа а ассетами:

 

$ php app/console assetic:dump              # создает все описанные assets в файловой системе
$ php app/console assetic:watch             # пересоздает assets, если их исходные файлы были модифицированы

$ php app/console assets:install            # копирует все assets бандлов в директорию web/bundles
$ php app/console assets:install --symlink  # копирует все assets бандлов в директорию web/bundles как симлинки

 

Команды генератора кода:

 

$ php app/console generate:bundle           # генерирует бандл
$ php app/console generate:controller       # генерирует контроллер
$ php app/console generate:doctrine:crud             # генерирует код для CRUD операций указанной сущности
$ php app/console generate:doctrine:entities         # генерирует классы сущностей и методы, согласно метаданным в аннотациях сущностей
$ php app/console generate:doctrine:doctrine:entity  # билдер для сущности
$ php app/console generate:doctrine:form             # генерирует класс формы

 

Работаем с Doctrine:

 

$ php app/console doctrine:database:create   # создает базу данных
$ php app/console doctrine:database:drop     # удаляет базу данных

$ php app/console doctrine:generate:crud     # генерирует код для CRUD операций указанной сущности
$ php app/console doctrine:generate:entities # генерирует классы сущностей и методы, согласно метаданным в аннотациях сущностей
$ php app/console doctrine:generate:entity   # билдер для сущности
$ php app/console doctrine:generate:form     # генерирует класс формы

$ php app/console doctrine:mapping:convert   # конвертирует mapping information между существующими форматами
$ php app/console doctrine:mapping:import    # импортирует mapping information из существующей базы данных
$ php app/console doctrine:database:info     # показыват информацию о базе данных

$ php app/console doctrine:schema:create     # выполняет или выводит SQL запросы для создания схемы базы данных
$ php app/console doctrine:schema:drop       # выполняет или выводит SQL запросы для удаления схемы базы данных
$ php app/console doctrine:schema:update     # выполняет или выводит SQL запросы для обновления схемы базы данных
$ php app/console doctrine:schema:validate   # проверяет схему базы данных в маппинг файлах на валидность

$ php app/console doctrine:fixtures:load     # загружает тестовые данных в базу данных, появляется при установленном DoctrineFixturesBundle
$ php app/console doctrine:migration:diff    # создает миграцию при наличии различий в маппинге и базе данных. Появляется при установленном DoctrineMigrationBundle
$ php app/console doctrine:migration:migrate # применяет последнюю или указанную миграцию к базе данных

 

И еще несколько полезных команд:

 

$ php app/cosole router:match                # находит роут по указанному пути в адресной строке
$ php app/console router:debug               # выводит списко всех зарегистрированных роутов

$ php app/console security:encode-password   # кодирует пароль указанным в конфигурационном файле способом
$ php app/console security:check             # проверяет известные проблемы безопасности в зависимостях проекта

 

Хочется сразу отметить, что несмотря на достаточное количество команд, они очень быстро запоминаются. Также обратите внимание, что в указанных выше командах не указаны параметры. Их вы можете посмотреть с помощью команды help. Большинство же команд и вовсе не имеют параметров.

Ну вот, пожалуй и все основные моменты, которые вам нужно знать для начала разработки с Symfony. В заключение также хотелось бы сказать, что разработку рекомендуется вести в соответствии с рекомендациями разработчиков фреймоворка. Ознакомиться с ними вы можете, прочитав посвященный этой теме раздел в документации к фреймоворку.

 

Часть 1 | Часть 2

Наверх