Як створити CRUD додаток на Symfony2?

Як створити 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 застосунку обійдеться вам малими зусиллями.