Компонент Contracts

Дата оновлення перекладу 2023-08-21

Компонент Contracts

Компонент Contracts надає набір абстракцій, вилучених з компонентів Symfony. Вони можуть бути використані для створення семантики, користь якої підтвердили компоненти Symfony, і які вже пройшли бойове хрещення реалізаціями.

Установка

Контракти постачаютьяс як окремі пакети, тому ви можете встановити лише ті проекти, які вам дійсно потрібні:

1
2
3
4
5
6
$ composer require symfony/cache-contracts
$ composer require symfony/event-dispatcher-contracts
$ composer require symfony/deprecation-contracts
$ composer require symfony/http-client-contracts
$ composer require symfony/service-contracts
$ composer require symfony/translation-contracts

Note

Якщо ви встановлюєте цей компонент поза додатком Symfony, вам потрібно підключити файл vendor/autoload.phpу вашому коді для включення механізму автозавантаження класів, наданих Composer. Детальніше можна прочитати у цій статті.

Використання

Абстракції в цьому пакеті корисні для слабкої звʼязаності за взаємосумісності. Використовуючи наданий інтрефейс в якості підказок, ви можете повторно використати будь-які реалізації, що відповідають контрактам. Це може бути компонент Symfony або інший пакет, наданий PHP-спільнотою в цілому.

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

Інші можуть бути корисними в якості маркування інтерфейсів, щоб надавати підказки про конкретну поведінку, яка може бути включена при використанні автоконфігурації або ручного тегування сервісів (або при будь-яких інших діях, наданих вашим фреймворком).

Принципи розробки

  • Контракти розподіляються за доменами, кожний у власний підпростір імен;
  • Контракти - це маленькі та узгоджені набори PHP-інтерфейсів, трейтів, нормативних docblock та наборів тестів для прикладу, де це можливо ...;
  • Контракти повинні мати доведену реалізацію для того, щоб потрапити у сховище;
  • Контракти повинні бути зворотно сумісними з існуючими компонентами Symfony.

Пакети, що реалізують конкретні контракти, повинні перераховувати їх у розділі provide файлу composer.json, використовуючи згоду symfony/*-implementation. Наприклад:

1
2
3
4
5
6
{
    "...": "...",
    "provide": {
        "symfony/cache-implementation": "1.0"
    }
}

Часто поставлені питання

Як це відрізняється від PHP-FIG PSR?

Коли можна застосувати, надані котракти надбудовуються над PHP-FIG PSR. Однак, PHP-FIG має інші цілі та інші процеси. Контракти Symfony фокусуються на наданні абстракцій, корисних самими по собі, але в той же час сумісних з реалізаціями, наданими Symfony.