Symfony 4 Тестуємо плагін Symfony Flex

Декілька місяців тому вийшла альфа версія Composer плагіна Symfony Flex. З випуском Symfony 3.3 стало можливим протестувати роботу даного плагіна і спробувати на смак підхід до побудови додатків на Symfony 4. Що ми зараз і спробуємо зробити. У попередньому пості я писав про структуру програми Symfony 4 і деякі особливості, тому зараз загострювати увагу на цьому не буду. Для того, щоб процес інсталяції пройшов гладко, рекомендую користувачам Windows використовувати GitBash або Cygwin термінал. Взагалі ви можете використовувати будь-який термінал, головне щоб в оточенні була доступна утиліта make і встановлені linux-tools. Також вам знадобиться PHP версії ^7.1.3

Symfony Flex

Кілька слів про саму плагін. Symfony Flex бере на себе турботу щодо налаштування компонентів, що встановлюються у вашу програму за допомогою Composer. Це не обов'язково мають бути компоненти Symfony. Плагін працює із рецептами. Якщо рецепт для пакета визначений у репозиторії, то Symfony Flex зробить свою роботу, інакше вам доведеться як і раніше налаштувати все руками.

На даний момент існує два репозиторія рецептів, головний (або офіційний) та публічний. Головний репозиторій відрізняється тим, що може визначати аліаси для пакетів та розміщення рецепту в цей репозиторій має бути схвалено core-team Symfony. У громадському репозиторії м'якіші правила розміщення.

Встановлення плагіна

Насамперед встановимо Symfony Flex:

З цього моменту плагін контролює процес встановлення пакетів у вашу програму. Щоб отримати простий Hello World додаток встановимо symfony/framework-bundle. Ми вже можемо скористатися «магією» Symfony Flex плагіна та використовуватизручний аліас для цього:

Тепер давайте подивимося на структуру каталогів:

У каталозі /etc, тепер знаходиться вся конфігурація та файл bundles.php, який містить масив усіх бандлів встановлених у вашому проекті. Цей файл модифікується плагіном Symfony Flex, кожного разу, коли ви встановлюєте або видаляєте бандл. Якщо ви бажаєте використовувати локальний бандл, вам доведеться самостійно прописати його до цього файлу.

Для конфігурації контейнера передбачено файл container.yaml, для роутингу routing.yaml. Так само в / etc ви побачите каталог packages, в якому зберігаються мінімальні конфігурації за замовчуванням для всіх компонентів. Насправді ці зміни копіюються з рецептів.

У каталозі /src розташовується клас Kernel, перероблений під нову структуру каталогів. Також тут є порожній каталог Controller.

У папці /web тепер лише index.php для всіх видів оточення. Якщо ви побачите вміст цього файлу, можна помітити, що для імітації присутності змінних оточення використовується компонент symfony/dotenv. Цей компонент постачається за замовчуванням з symfony 3.3. У режимі розробки він дозволяє визначати змінні оточення у файлі.

Давайте встановимо цей компонент:

Теоретично ми встановили мінімальний набір компонентів, необхідних для запуску програми. Але є один нюанс. За замовчуванням рецепти поставляються з конфігурацією YAML. І тому навіть якщо власну конфігурацію ви хочете писати в іншому форматі, вам все одно доведеться встановити компонент symfony/yaml, щоб конфігурації всіх компонентів могли бути завантажені. В іншому випадку вам доведеться переписувати всі конфіги в каталозі /etc/packages в потрібний формат кожного разу, коли ви додаєте новий компонент.

Давайте встановимоsymfony/yaml:

Майже все готове. Залишилося трохи "зачарувати" над файлом composer.json. Перше, що потрібно зробити, це прописати секцію psr-4, для автозавантаження наших класів. Оскільки весь код у нас лежить прямо в /src, додамо:

Зверніть увагу на наступну секцію composer.json:

У цю секцію плагін Symfony Flex додає необхідні виклики команд для кожного компонента. Дані дзвінки прописані в рецептах. При поточній конфігурації секція «auto-scripts» не буде виконана плагіном. Для того, щоб це виправити, потрібно додати такі параметри:

Цей шаблон дозволяє плагін Symfony Flex включитися в процес при настанні подій «post-install» і «post-update» композера.

Тепер попросимо Composer перезбирати клас автозавантаження:

Настав час додати контролер. Створимо в папці /src/Controller клас TestController:

Тепер потрібно прописати маршрут у файлі /etc/routing.yaml:

Запускаємо веб-сервер за допомогою make:

Переходимо у браузері по 127.0.0.1:8000 і бачимо наше повідомлення «It works!».

Мінімальний додаток зібрано та запущено, але хочеться використовувати анотації для визначення маршрутів. Без проблем! Для цього нам знадобиться sensio/framework-extra-bundle та symfony/annotations-pack, для останнього передбачений зручний аліас annot.

Змінимо наш контролер, додавши інструкцію для маршруту (не забудьте так само додати use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route):

Переходимо 127.0.0.1:8000/test і бачимо наше повідомлення. Якщо нам більше не потрібно використовувати інструкції, ми можемо видалити компоненти:

Залишиться тільки повернути налаштування роутингу в routing.yaml, і все буде працювати. Плагін Symfony Flex подбає про те,щоб видалити за собою все сміття, а також прибрати з конфігурації бандл sensio/framework-extra-bundle.

Ось таким чином можна вже зараз експериментувати з додатками в стилі Symfony 4. Честно кажучи, ви можете скористатися вже готовим файлом composer.json для встановлення такої програми «з коробки»:

Я описав процес ручного складання проекту, щоб акцентувати увагу на деяких деталях. Вихідники проекту можна подивитися тут.