Как создать CRUD приложение на Symfony2?

Разработка классического CRUD (Создание/Чтение/Обновление/Удаление) приложения для работы с базами данных — задача крайне распространенная. В свете выхода новой версии нежно любимого нами фреймворка хочу рассказать, как создать приложение на Symfony2.

Во-первых, следует сказать, что Symfony2 полностью интегрируется с открытой библиотекой Doctrine2 ORM, предназначенной для работы с базами данных, поэтому процесс создания CRUD приложения происходит следующим образом: мы создаем бандл, в нем создаем сущность Doctrine2 ORM, а затем преобразовываем ее в CRUD приложение.

Перед началом работы следует проверить сведения для подключения к нужной базе данных в конфигах. Обычно они содержаться в файле app/config/parameters.yml. К этому файлу обращается главный конфигурационный файл Doctrine2 ORM. Держать сведения для подключения к базе данных в parameters.yml удобно, поскольку в таком случае на разных серверах можно размещать разные версии этого файла.

После того, как вы ввели сведения для подключения, можно сказать Doctrine2 ORM, что мы хотим создать базу данных:

php app/console doctrine:database:create

Создаем новый Bundle

В Symfony2 реализован очень удобный набор консольных команд для генерации различных элементов, использование которых позволит значительно сэкономит время. Поскольку весь функционал Symfony2 организовывается с помощью бандлов, то начать нужно с создания нового бандла для нашего CRUD приложения:

php app/console generate:bundle

Метаданные

Doctrine2 ORM позволяет передавать в базу данных целые объекты и получать их из базы данных. Это возможно благодаря сопоставлению PHP-класса с таблицей базы данных, а его свойств — с колонками таблицы:

Сопоставление класса с таблицей базы данных

Чтобы Doctrine2 ORM могла это сделать, вам нужно будет создать метаданные, которые будут говорить Doctrine2, как следует сопоставить класс и его свойства с базой данных. Эти метаданные можно предоставлять в различных форматах (например, YAML или XML) или же прямо внутри класса с помощью аннотаций (но нельзя предоставлять их сразу в нескольких форматах). Например, для описания сущности Product метаданные к ней можно добавить следующим образом:

// src/Acme/StoreBundle/Entity/Product.php namespace Acme\StoreBundle\Entity; 
 
use Doctrine\ORM\Mapping as ORM; 
 
/** 
 * @ORM\Entity 
 * @ORM\Table(name="product") 
 */class Product 
{/** 
     * @ORM\Id 
     * @ORM\Column(type="integer") 
     * @ORM\GeneratedValue(strategy="AUTO")
     * 
     * @var int
     * /
    private $id;

Создаем сущность

Следующее, чего требует создание CRUD приложения — сгенерировать классы сущностей для манипуляции данными.

php app/console generate:doctrine:entity

Сущность — это базовый класс, в котором содержаться данные. Обратите внимание, что сгенерировать можно сущности только с простыми полями, поэтому для создания связей между сущностями придется прописать метаданные для организации связей вручную в нужные классы сущностей.

Создаем CRUD

Теперь мы можем сгенерировать базовый контроллер для сущности из созданного нами бандла, который позволит выполнять 5 операций:

  1. Получить список всех записей.
  2. Показать одну запись, определенную с помощью ее основного ключа.
  3. Создать новую запись.
  4. Отредактировать существующую запись.
  5. Удалить существующую запись.

Для создания этого контроллера, выполним следующую команду:

php app/console doctrine:generate:crud

У нее есть ряд параметров. Обычно команда запускается в интерактивном режиме и сама спрашивает у нас необходимые данные, но если отключить эту возможность, нам понадобиться вручную определить значения таких ее параметров:

--entity — имя сущности, которое имеет вид ИмяБандла:ИмяСущности.

--route-prefix — префикс для каждого роутинга, который определяет действие.

--with-write — допустимые значения: yes|no. Определяет, требуется ли генерировать действия new, create, edit, update и delete.

--format — допустимые значения: annotation|php|yml|xml. Определяет формат конфигурационных файлов, которые будут генерироваться, например для роутинга. Если вы будете использовать формат annotation (он используется по умолчанию), убедитесь, что у вас установлен бандл SensioFrameworkExtraBundle.

--overwrite — допустимые значения: yes|no. Определяет, будут ли переписываться существующие файлы. По умолчанию используется значение no.

Вот, собственно, так осуществляется разработка CRUD приложения на Symfony2, что есть довольно простым мероприятием.

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