是否可以使用 Zend Servicemanager 传输中间件?
Is it possible to pipe a middleware using Zend Servicemanager?
我正在使用 Zend Expressive 作为 API。我已经成功地添加了一个中间件,它为每个请求验证 headers of API Keys 的请求。
目前我在config/pipeline中添加middleware using the pipe() function。php
$app->pipe(new MyAuthMiddleware(....);
这实际上效果很好。
但是,我想使用 Zend Servicemanager 添加管道,使用 configuration file,例如:
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.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,
],
],
];
这是我现在可以找到的更多信息:
我正在使用 Zend Expressive 作为 API。我已经成功地添加了一个中间件,它为每个请求验证 headers of API Keys 的请求。
目前我在config/pipeline中添加middleware using the pipe() function。php
$app->pipe(new MyAuthMiddleware(....);
这实际上效果很好。 但是,我想使用 Zend Servicemanager 添加管道,使用 configuration file,例如:
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.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,
],
],
];
这是我现在可以找到的更多信息: