Можно ли передать промежуточное ПО с помощью 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,
],
],
];
Вот еще немного информации, которую я могу найти прямо сейчас: