Компонент 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.