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