是否可以使用Zend Servicemanager管道中间件?

时间:2017-10-22 20:36:59

标签: php zend-framework2 middleware zend-expressive

我使用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管道中间件?以及如何使用。

1 个答案:

答案 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,
        ],
    ],
]; 

以下是我现在可以找到的更多信息: