Разработка классического 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 операций:
- Получить список всех записей.
- Показать одну запись, определенную с помощью ее основного ключа.
- Создать новую запись.
- Отредактировать существующую запись.
- Удалить существующую запись.
Для создания этого контроллера, выполним следующую команду:
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 приложения обойдется вам малыми усилиями.