我使用Zend Expressive作为API。我已经成功添加了一个中间件,它可以为每个请求验证API密钥的请求标头。
目前我在config / pipeline.php中添加middleware using the pipe() function
$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管道中间件?以及如何使用。
答案 0 :(得分:3)
是的,这是可能的。表达式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,
],
],
];
以下是我现在可以找到的更多信息: