Новое в Symfony 5.1: Декораторы стека

Промежуточное программное обеспечение – это компьютерное программное обеспечение, которое разделяет два или более API и предоставляет такие услуги, как ограничение скорости, аутентификация и ведение журнала. В Symfony вы можете добиться чего-то подобного, используя декораторы сервисов.

Однако при оформлении нескольких сервисов конфигурация является многословной, и изменить порядок оформления сложно:

services:
    App\Mailer\Mailer: ~

    App\Mailer\RateLimitedMailer:
        decorates: App\Mailer\Mailer
        arguments: [20] # mails per second

    App\Mailer\LoggingMailer:
        decorates: App\Mailer\Mailer

Вот почему в Symfony 5.1 ввели новый синтаксис для объединения нескольких декораторов, используя новую концепцию под названием «стек». Это эквивалентная конфигурация предыдущего примера:

services:
    App\Mailer\Mailer:
        stack:
            - App\Mailer\LoggingMailer: ~
            - App\Mailer\RateLimitedMailer:
                arguments: [20]
            - App\Mailer\Mailer: ~

Этот новый синтаксис (который также доступен при использовании форматов XML и PHP) упрощает добавление/удаление/изменение порядка сервисов декорирования. Основное преимущество «стеков» по сравнению с классическим промежуточным программным обеспечением состоит в том, что промежуточное программное обеспечение определяет специфичный для домена интерфейс, который должен быть реализован на каждом этапе обработки для обеспечения возможности наращивания. Стеки не требуют этого.

Кроме того, стеки могут быть объединены для создания новых стеков. Проверьте связанный PR для большего количества примеров.