noglitchyo/symfony-middleware-bundle

将 PSR-15 中间件集合调度器引入到 Symfony。

0.1.0 2019-07-19 15:24 UTC

This package is auto-updated.

Last update: 2024-09-15 21:46:46 UTC


README

将 PSR-15 中间件支持引入到 Symfony 框架。

PHP from Packagist Build Status codecov Scrutinizer code quality (GitHub/Bitbucket) Packagist

路线图

  • 完整的测试覆盖率
  • 文档

此包正在积极开发中,不建议在生产环境中使用。请随时贡献!

描述

Symfony 中间件包为 Symfony 应用程序提供对 PSR-15 中间件执行的支持。它以非侵入的方式引入中间件调度器,因此可以使用最小和最简单的配置。

此包试图提供两种实现,因此可以以不同的方式使用

  • 通过连接到 HttpKernel 事件的监听器。如果没有中间件创建响应,它将在将请求传递给控制器之前执行中间件集合。

  • 作为 MiddlewareStackKernel 的 HttpKernel 装饰器。

入门

要求

  • Symfony 4
  • PHP 7.3

安装

使用 Symfony Flex 的应用程序

打开命令行控制台,进入您的项目目录,然后执行

$ composer require noglitchyo/symfony-middleware-bundle

未使用 Symfony Flex 的应用程序

步骤 1:下载 Bundle

打开命令行控制台,进入您的项目目录,并执行以下命令以下载此包的最新稳定版本

$ composer require noglitchyo/symfony-middleware-bundle

此命令需要您全局安装 Composer,如 Composer 文档中的安装章节所述。

步骤 2:启用 Bundle

然后,通过将其添加到项目 config/bundles.php 文件中注册的包列表来启用该包。

// config/bundles.php

return [
    // ...
    NoGlitchYo\MiddlewareBundle\NoGlitchYoMiddlewareBundle::class => ['all' => true],
];

用法

步骤 1:创建中间件集合

首先,需要定义一个中间件集合。中间件集合将包含要执行的所有中间件。

为此,此包依赖于来自 noglitchyo/middleware-collection-request-handler 的中间件集合实现,它允许以单个 PSR-15 中间件或请求处理器的形式执行中间件集合,并具有不同的执行策略。

示例

services.yaml

  # Let's define some middlewares that we want to use.
  App\Middleware\SecurityMiddleware: ~
  App\Middleware\CorsMiddleware: ~
  App\Middleware\RouterMiddleware: ~*

  # Then, we define the middleware
  middleware_collections.default:
    class: NoGlitchYo\MiddlewareCollectionRequestHandler\Collection\MiddlewareCollectionInterface 
        # Define the middleware collection class which MUST implement MiddlewareCollectionInterface.
        # Some default implementations are provided. Choose one of them or create your own.
        # NoGlitchYo\MiddlewareCollectionRequestHandler\Collection\ArrayStackMiddlewareCollection
        # NoGlitchYo\MiddlewareCollectionRequestHandler\Collection\SplQueueMiddlewareCollection
        # NoGlitchYo\MiddlewareCollectionRequestHandler\Collection\SplStackMiddlewareCollection
    arguments:
      - ['@App\Middleware\EncoderMiddleware', '@App\Middleware\RouterMiddleware', '@App\Middleware\EncoderMiddleware']
    tags: ['middlewares.collection'] # Tag it! So the collection can be picked up.

步骤 2:定义中间件处理器

处理器为执行附加的中间件集合提供指令。一旦定义,中间件集合将在每个传入请求上执行。

可以在处理器应运行时定义一些条件

  • 路由路径匹配:如果请求的路由路径与给定的路由路径匹配
  • 路由名称匹配:如果请求的路由名称与给定的路由名称匹配

示例

middlewares.yaml

middlewares:
  handlers:
    default: # Name of your handler configuration
      collection: default.middleware_collection # should be the collection class name / service name defined in services.yaml
      condition: # Condition is optional, if not provided the collection will be executed for every requests
        routePath: '/path/test/1'
        routeName: 'myCustomRouteName'

测试

想要运行测试套件?请继续

composer test

参考

https://www.php-fig.org/psr/psr-15/

许可

此项目受 MIT 许可证的许可 - 有关详细信息,请参阅LICENSE.md 文件。