germania-kg/middleware

PSR-15 和 PSR-7 风格中间件的集合

3.3.33 2022-05-30 13:31 UTC

README

Germania KG · Middleware

收集我们在应用程序中使用的一些有用的 PSR-15 单次和双次中间件

Packagist PHP version Build Status Scrutinizer Code Quality Code Coverage Build Status

使用 Composer 安装

$ composer require germania-kg/middleware

LogHttpStatusMiddleware

$next 完成后,将 HTTP 响应的状态码和原因写入 PSR-3 日志记录器,使用 Psr\Log\LoggerInterface::info 方法。虽然这个中间件符合 PSR-15 规范,这里有一个 Slim3 示例

<?php
use Germania\Middleware\LogHttpStatusMiddleware;

$app        = new Slim\App;
$logger     = new \Monolog\Logger;
$middleware = new LogHttpStatusMiddleware( $logger);

$app->add( $middleware );

LogHttpStatusMiddleware 还实现了 Psr\Log\LoggerAwareInterface,并额外使用了 Germania\Middleware\LogLevelTrait,因此可以这样配置日志

$middleware->setLogger($monolog)
           ->setLogLevel( \Psr\Log\LogLevel::INFO )

EmailExceptionMiddleware

虽然这个中间件符合 PSR-15 规范,这里有一个 Slim3 示例

<?php
use Germania\Middleware\EmailExceptionMiddleware;

$app = new Slim\App;

$mailer_factory = function() {
	return Swift_Mailer::newInstance( ... );
};

$message_factory = function() {
	return Swift_Message::newInstance();
};

$middleware = new EmailExceptionMiddleware("My APP", $mailer_factory, $message_factory);
$app->add( $middleware );

额外功能:显示异常信息

<?php
use Germania\Middleware\EmailExceptionMiddleware;

$middleware = new EmailExceptionMiddleware("My APP", $mailer_factory, $message_factory);

try {
	throw new \Exception("Huh?");
}
catch (\Exception $e) {
	echo $middleware->render( $e );
}

ScriptRuntimeMiddleware

记录从实例化到 next 中间件执行的时间。它使用 PSR-3 LoggerInterface 中描述的 info() 方法。虽然这个中间件符合 PSR-15 规范,这里有一个 Slim3 示例

<?php
use Germania\Middleware\ScriptRuntimeMiddleware;

$app = new Slim\App;
$logger = new \Monolog\Logger;

$app->add( new ScriptRuntimeMiddleware($logger) );

ScriptRuntimeMiddleware 还实现了 Psr\Log\LoggerAwareInterface,并额外使用了 Germania\Middleware\LogLevelTrait,因此可以这样配置日志

$middleware->setLogger($monolog)
           ->setLogLevel( \Psr\Log\LogLevel::INFO )

LogExceptionMiddleware

next 中间件执行过程中记录抛出的异常信息。它使用 PSR-3 LoggerInterface 中描述的 warning() 方法。虽然这个中间件符合 PSR-15 规范,这里有一个 Slim3 示例

<?php
use Germania\Middleware\LogExceptionMiddleware;

$app = new Slim\App;
$logger = new \Monolog\Logger;

$app->add( new LogExceptionMiddleware($logger) );

LogExceptionMiddleware 还实现了 Psr\Log\LoggerAwareInterface,并额外使用了 Germania\Middleware\LogLevelTrait,因此可以这样配置日志

$middleware->setLogger($monolog)
           ->setLogLevel( \Psr\Log\LogLevel::INFO )

开发

克隆该仓库,进入目录并安装 Composer 依赖项。

# Clone and install
$ git clone https://github.com/GermaniaKG/Middleware.git <directory>
$ cd <directory>
$ composer install

单元测试

phpunit.xml.dist 复制到 phpunit.xml 并根据您的需要进行调整,或者保持不变。运行 PhpUnit 测试或 composer 脚本,例如这样

$ composer test
# or
$ vendor/bin/phpunit