Система пакетів

Дата оновлення перекладу 2022-04-27

Система пакетів

Caution

В версіях Symfony до 4.0, було рекомендовано впорядковувати ваш код, використовуючи пакети. Це більше не рекомендується, і пакети мають бути використані лише для того, щоб ділитися кодом та функціями поміж декількома додатками.

Пакет схожий на плагін в інших ПЗ, тільки краще. Базові функції фреймворку Symfony реалізуються за допомогою пакетів FrameworkBundle, SecurityBundle, DebugBundle, та ін.). Вони також використовуються для додавання нових функцій в ваш застосунок через сторонні пакети.

Пакети, які використовуються в вашому додатку, мають бути підключені для кожного середовища в файлі config/bundles.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
// config/bundles.php
return [
    // 'all' означає, що пакет підключено для будь-якого середовища Symfony
    Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
    Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
    Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
    Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
    Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle::class => ['all' => true],
    Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
    Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
    // цей пакет пдіключається тільки в 'dev' та 'test', тому ви не можете використовувати його в 'prod'
    Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
];

Tip

В додатку Symfony за замочуванням, який використовує Symfony Flex, пакети підключаються та відключаться для вас автоматично при їх установці або видаленні, тому вам не потрібно шукати або редагувати файл bundles.php.

Створення пакету

Цей розділ створює та підключає новий пакет, щоб продемонструвати, як легко це зробити. Новий пакет називається AcmeTestBundle, де частина Acme - просто шаблонне ім'я, яке необхідно замінити деяким іменем "постачальника", який представляє вас або вашу організацію (наприклад, ABCTestBundle для компанії з назвою ABC).

Почніть зі створення каталогу src/Acme/TestBundle/, та додайте в нього новий файл під назвою AcmeTestBundle.php:

1
2
3
4
5
6
7
8
// src/Acme/TestBundle/AcmeTestBundle.php
namespace App\Acme\TestBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class AcmeTestBundle extends Bundle
{
}

Tip

Ім'я AcmeTestBundle слідує стандартним домовленностям привласнення імен пакетам . Ви також можете вирішити скоротити ім'я пакету до TestBundle, назвавши цей клас TestBundle (та назвавши файл TestBundle.php).

Цей пустий клас - єдине, що вам знадобиться для створення нового пакету. Незважаючи на те, що частіше за все він пустий, цей клас потужний за можливостями та може бути використаний для налаштування поведінки пакету. Тепер, коли ви створили пакет, підключіть його:

1
2
3
4
5
// config/bundles.php
return [
    // ...
    App\Acme\TestBundle\AcmeTestBundle::class => ['all' => true],
];

І хоча він поки що нічого не робить, AcmeTestBundle готовий до використання.

Структура каталогу пакету

Структура каталогу пакету проста та гнучка. За замочуванням, система пакетів слідує набору домовленостей, які допомагають створювати одноманітний код для всіх пакетів Symfony. Подивіться на AcmeDemoBundle, так як він містить деякі найрозповсюдженіші елементи пакету:

Controller/
Містить контролери пакету (наприклад, RandomController.php).
DependencyInjection/
Містить деякі класи розширення впровадження залежності, які можкуть імпортувати конфігурацію сервісу, реєструвати пропуски компілятора і т.д. (цей каталог не є обов'язковим).
Resources/config/
Містить конфігурацію, включно із конфігурацією маршрутів (наприклад, routing.yaml).
Resources/views/
Містить шаблони, рощташовані в алфавітному порядку по імені контролера (наприклад, Random/index.html.twig).
Resources/public/
Містить веб-ресурси (зображення, таблиці стилів і т.д.); він копіюється або символічно прив'язується до каталогу проекту public/ за допомогою командного рядку assets:install.
Tests/
Містить всі тести пакету.

Пакет може бути настільки великим або маленьким, наскільки це диктує функція, що реалізовується ним. Він містить лише ті файли, які вам потрібні, і більше нічого.

По ходу читання книги, ви дізнаєтесь, як зберігати об'єкти в базі даних, створювати та валідувати форми, створювати переклади вашого додатку, писати тести та багато іншого. Кожна така можливість має своє місце та роль в рамках пакету.