Компонент 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-интерфейсов, трейтов, нормативных are small and consistent sets of PHP interfaces, traits, normative 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.