Symfony2 Architecture

Гнучка архітектура є найпомітнішою особливістю фреймворку Symfony2. Вона допомагає цьому PHP-фреймворку виділятися та дозволяє розробникам швидко створювати функціональні додатки. Ця тема заслуговує окремої статті, тому тут ми зануримося в деякі деталі архітектури Symfony2.

Компоненти Symfony

Symfony2 працює на основі окремих декомпозованих компонентів, які є багаторазовими. Їх називають компонентами Symfony. Всі вони допомагають вирішувати типові завдання, з якими можна зіткнутися під час розробки для вебу. До речі, деякі інші PHP-фреймворки використовують компоненти Symfony:

  1. Silex (BrowerKit, CssSelector, DomCrawler, EventDispatcher, HttpFoundation, HttpKernel, Routing, Form, Translation та Validator).
  2. Behat (Console, DependencyInjection, EventDispatcher, Finder, Yaml, Config та Translation).
  3. FLOW3 (YAML).

Популярна CMS Drupal8 також використовує такі компоненти Symfony2, як HttpKernel, HttpFoundation, EventDispatcher, YAML, Routing, Twig тощо.

Але щоб отримати максимальну вигоду від Symfony2, ви повинні використовувати його в повному обсязі, а не покладатися на окремі компоненти. Таким чином, ви отримаєте перевагу тісної інтеграції всіх компонентів прямо з коробки. Тепер давайте заглянемо всередину сервісно-орієнтованої архітектури Symfony2.

Структура директорії

Перше, що потрібно згадати, це структура директорії. У Symfony2 вона реалізована в типовому вигляді, але має досить гнучкі налаштування:

Symfony2 Architecture

app/ — тут ви знайдете всі дані про конфігурацію додатку.

src/ — вихідний код.

web/ — коренева веб-директорія.

Особливості веб-директорії

Коренева веб-директорія містить усі публічні та статичні файли, які використовуються стилями та завантажуються в них, файли JavaScript та фронтальний контролер.

web/app.php

Symfony2 Architecture

Архітектура фреймворку Symfony2 базується на фронтальному контролері web/app.php. Основна точка входу в конфігурацію додатку — це клас AppKernel. Вхідні параметри конструктора: prod — ініціалізація середовища, в якому буде працювати додаток; другий параметр визначає, чи використовувати дані для налагодження під час роботи. Метод handle отримує об'єкт класу Request, сформований з глобальних змінних, і повертає об'єкт класу Response клієнту. Клас AppKernel повинен реалізувати два методи:

registerBundles — повертає масив пакетів, необхідних для роботи.

app/AppKernel.php

Symfony2 Architecture

registerContainerConfiguration — завантажує конфігурацію програми, що відповідає середовищу, переданому конструктору з каталогу app/config.

Архітектура Symfony2

Автозавантаження класів PHP виконується за допомогою Composer. Усі залежності розташовані в каталозі vendor, хоча це лише домовленість. Іншими словами, ви можете самостійно вибрати каталог зберігання. Це може бути глобальний каталог або розташований у локальній папці проекту.

Завдяки використанню архітектури, орієнтованої на сервіси, функції Symfony2 організовані в модулі, які розділені на незалежні сервіси. Вони становлять основу Symfony2.

Чому пакет, а не плагін?

У архітектурі Symfony2 концепція пакета відіграє важливу роль. Але деякі розробники можуть запитати: чому використовувати пакет, а не знайомий плагін? Пакет схожий на плагін, але має одну помітну особливість: у Symfony2 все може бути пакетом. Це можуть бути спеціальні функції фреймворку або код, який ви пишете безпосередньо в додатку.

Особливий статус пакетів у Symfony2 цілком виправданий. Можливо налаштувати як нові, так і вже створені пакети. Ця виняткова гнучкість дозволяє вам встановлювати функції вашого додатку та виконувати оптимізацію так, як вам потрібно. Ядро фреймворку також включає наступні компоненти: FrameworkBundle, DoctrineBundle, SwiftmailerBundle, AsseticBundle.

Після написання файлів конфігурації за допомогою XML, YAML або PHP ви можете налаштувати кожен пакет окремо. Наприклад, зверніть увагу на стандартну конфігурацію:

app/config/config.yml

Архітектура Symfony2

Кожен запис у config.yml відповідає за точну конфігурацію пакета. Стандартна конфігурація встановлюється для кожного середовища на основі конкретного файлу конфігурації.

В кінцевому підсумку додаток складається з кількох пакетів, визначених методом registerBundles(). Гнучка платформа Symfony2 дозволяє вам вибрати, де зберігати пакети, які з них ваші додатки будуть спільно використовувати та які налаштування використовувати в кожній конкретній ситуації.

Ось деякі з найпопулярніших пакетів серед спільноти Symfony:

  1. FOSUserBundle (60%)
  2. FOSRestBundle (30%)
  3. KnpMenuBundle (25%)
  4. StofDoctrineExtensionsBundle (25%)
  5. JMSSerializerBundle (24%)
  6. SonataAdminBundle (24%)

Як працюють кеш і журнали

Symfony2 безумовно є одним з найшвидших багатофункціональних фреймворків, доступних сьогодні. Але що надає йому таку швидкість, враховуючи, що йому потрібно аналізувати та інтерпретувати десятки XML і YAML для кожного запиту?

Система кешування частково відповідає за це. Застосунок аналізується лише під час першого запиту. Потім вся інформація компілюється в оптимізований PHP код і зберігається в відповідній папці app/cache/. Середовище Symfony2 досить розумне, щоб своєчасно очищати кеш, коли файли змінюються. Для усунення проблем і помилок вам слід відкрити папку app/logs/, де зберігаються всі журнали запитів.

Як виглядає інтерфейс командного рядка?

Зручний у використанні командний рядок допомагає в обслуговуванні застосунку. Консоль дозволяє автоматизувати робочий процес, виконуючи аналіз і надаючи найчастіше використовувані команди. Щоб зрозуміти її можливості, запустіть консоль без аргументів:

Symfony2 Architecture

Щоб уточнити можливості команди, використовуйте вбудований --help параметр.

Діаграми архітектури Symfony2

І нарешті, давайте подивимося на візуалізацію архітектури Symfony2. Ось перша діаграма архітектури Symfony2, яка показує три основні компоненти, які ви можете знайти в більшості застосунків:

Діаграма архітектури Symfony2

Усі запити, які отримує застосунок, надсилаються до фронт-контролера, який створює екземпляр AppKernel для обробки конкретного запиту та повернення відповіді:

Діаграма архітектури Symfony2

Підсумуємо, що ми дізналися. Як ви можете бачити з наведених вище прикладів, Symfony2 дозволяє розробникам дуже точно налаштовувати застосунки. Ви самі обираєте, як називати директорії та де вони будуть розташовані, а також які компоненти включати в кожен конкретний проект.