Можно ли передать промежуточное ПО с помощью Zend Servicemanager?

Я использую Zend Expressive в качестве API. Мне удалось добавить промежуточное программное обеспечение, которое проверяет заголовки запросов API-ключей для каждого отдельного запроса.

На данный момент я добавляю промежуточное ПО с помощью функции pipe() в config/pipeline.php

$app->pipe(new MyAuthMiddleware(....);

Это на самом деле работает довольно хорошо. Тем не менее, я хотел бы добавить трубопровод с помощью Zend Servicemanager, с файлом конфигурации, например:

return [
'dependencies' => [
    /* ... */
    'invokables' => [
        // Remove this entry:
        App\Action\HelloAction::class => App\Action\HelloAction::class,
    ],
    'factories' => [
        /* ... */
        // Add this:
        App\Action\HelloAction::class => App\Action\HelloActionFactory::class,
    ],
    /* ... */
],];

Вопрос: возможно ли передать промежуточное ПО с помощью Zend Servicemanager? И как, если это так.

1 ответ

Да, это возможно. До выразительного 1.1 это был конфиг, как вы просили. Начиная с версии 1.1, она по умолчанию управляется программно, если вы устанавливаете ее через скелет. Вы все еще можете использовать конфигурацию, управляемую, но я должен отметить, что вы не можете использовать оба. По крайней мере, это не рекомендуется.

Конфигурация может выглядеть так (взято из выразительного 1.0 выразительного приложения). Обработка ошибок изменилась в 1.1+, но у меня нет примера для этого.

<?php

return [
    'dependencies' => [
        'factories'  => [
            // ...
        ],
    ],

    'middleware_pipeline' => [
        'always' => [
            'middleware' => [
                Zend\Expressive\Helper\ServerUrlMiddleware::class,
            ],
            'priority'   => 10000,
        ],

        'routing' => [
            'middleware' => [
                Zend\Expressive\Container\ApplicationFactory::ROUTING_MIDDLEWARE,
                Zend\Expressive\Helper\UrlHelperMiddleware::class,
                LocalizationMiddleware::class,
                AuthenticationMiddleware::class,
                AuthorizationMiddleware::class,
                Zend\Expressive\Container\ApplicationFactory::DISPATCH_MIDDLEWARE,
            ],
            'priority'   => 1,
        ],

        'error' => [
            'middleware' => [
                Application\Middleware\Auth\UnauthorizedErrorMiddleware::class,
                Application\Middleware\Auth\ForbiddenErrorMiddleware::class,
                Application\Middleware\Logger\ExceptionLoggerMiddleware::class,
            ],
            'error'      => true,
            'priority'   => -10000,
        ],
    ],
]; 

Вот еще немного информации, которую я могу найти прямо сейчас:

Другие вопросы по тегам