bitexpert/adrenaline

此包已被放弃,不再维护。没有建议的替代包。

基于 Adroit 中间件的 PSR-7 微型框架。

v0.4.0 2017-02-15 10:50 UTC

README

基于 Adroit 中间件的 PSR-7 微型框架,可加速您的开发 ;)

Build Status Coverage Status

入门指南

安装 bitexpert/adrenaline 的首选方式是通过 Composer。只需将 bitexpert/adrenaline 添加为依赖项

composer.phar require bitexpert/adrenaline

原型设计

如果您想使用 Adrenaline 进行快速原型设计,请按照以下步骤操作

  • 在应用程序的根目录中创建一个 index.php 文件。
  • 向其中添加以下行
<?php
use bitExpert\Adrenaline\Adrenaline;
use Zend\Diactoros\ServerRequestFactory;
use Zend\Diactoros\Response;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;

$adrenaline = new Adrenaline();

$adrenaline->get('home', '/', function (ServerRequestInterface $request, ResponseInterface $response) {
    $response->getBody()->rewind();
    $response->getBody()->write('Home');

    return $response;
});

$request = ServerRequestFactory::fromGlobals();
$response = new Response();
$adrenaline($request, $response);
  • 在同一目录下使用 php -S localhost:8082 启动服务器。
  • 浏览到 http://localhost:8082,您应该在屏幕上看到 "Home"。

这就是基本设置。您可以使用 Adrenaline 的隐式路由函数添加更多操作。当然,您也可以像在产品应用中一样使用中间件钩子、错误处理器和自定义解析器。这只是快速原型设计的一种可能性。

如何配置动作解析器

您可以为 Adrenaline 配置自定义动作解析器。默认情况下,如果构造函数中没有提供动作解析器,则添加了 bitexpert/adroitCallableActionResolver,这允许您使用简单的闭包作为动作(例如,用于原型设计情况)

请注意,如果您定义了自己的动作解析器集,则必须显式添加此解析器才能继续使用它。

<?php
$customActionResolver = new MyCustomActionResolver();
$adrenaline = new Adrenaline([$customActionResolver]);

如何配置响应解析器

您可以为 Adrenaline 配置自定义响应解析器。默认情况下,如果构造函数中没有提供响应解析器,则添加了 bitexpert/adroitCallableResponderResolver,这允许您使用简单的闭包作为响应(例如,用于原型设计情况)

请注意,如果您定义了自己的响应解析器集,则必须显式添加此解析器才能继续使用它。

<?php
$customResponderResolver = new MyCustomResponderResolver();
$adrenaline = new Adrenaline([], [$customResponderResolver]);

如何配置路由

使用肾上腺素,您还可以使用自定义路由器。您的自定义路由器需要继承 bitexpert/pathfinderRouter 接口。

<?php
$customRouter = new MyCustomRouter();
$adrenaline = new Adrenaline([], [], $customRouter);

如果您想在隐式路由创建函数(get、post 等)中使用自定义路由类,您可以设置自定义路由类。

<?php
$adrenaline = new Adrenaline();
$adrenaline->setDefaultRouteClass(MyRoute::class);

关于标准路由定义,请参阅 pathfinder 文档

如何实现一个操作

请参阅 bitexpert/adroit 文档

如何实现一个响应器

请参阅 bitexpert/adroit 文档

如何使用中间件钩子

肾上腺素提供通过提供的中间件钩子将您的中间件集成到默认请求处理的可能性的功能。

<?php
$myMiddleware = function (ServerRequestInterface $request, ResponseInterface $response, callable $next = null) {
};

$adrenaline->beforeRouting($myMiddleware) //Middleware piped before routing middleware
$adrenaline->beforeResolveAction($myMiddleware) //Middleware piped before action resolver middleware
$adrenaline->beforeExecuteAction($myMiddleware) //Middleware piped before action executor middleware
$adrenaline->beforeResolveResponder($myMiddleware) //Middleware piped before responder resolver middleware
$adrenaline->beforeExecuteResponder($myMiddleware) //Middleware piped before responder executor middleware
$adrenaline->beforeEmit($myMiddleware) //Middleware piped before emitter

这些钩子是可链式的,您可能需要多次调用它们。每次调用都将提供的中间件推送到相应的堆栈。作为中间件,您可以使用简单的闭包,或者使用实现具有相应签名的 __invoke 方法的自定义类。

如何使用错误处理器

您还可以定义一个错误处理器,该处理器将在肾上腺素处理请求时发生未捕获的错误时使用。您可以使用简单的闭包或实现自己的专用类进行错误处理。 更新 由于 Stratigility 1.3 的更新(我们内部使用 MiddlewarePipe),我们必须更改错误处理,因为已弃用警告。尽管如此,我们为了向后兼容而使旧配置样式工作。

<?php

// simple closure
$adrenaline->setErrorHandler(function (ServerRequestInterface $request, ResponseInterface $response, $err) {
    return $response->withStatus(500);
});

// class which implements __invoke with same signature as above
$adrenaline->setErrorHandler(new MyCustomErrorHandlerClass());

我们建议使用新的错误处理,因为使用“旧”的错误处理器可能在肾上腺素中过一段时间后也变得过时。

$adrenaline->setErrorHandler(new ErrorHandler(new Response(), function ($err, ServerRequestInterface $request, ResponseInterface $response) {
    return $response->withStatus(500);
});

// class which implements __invoke with same signature as above
$adrenaline->setErrorHandler(new ErrorHandler(new Response(), new MyErrorResponseGenerator());

有关更多信息,请参阅: https://docs.zendframework.com/zend-stratigility/migration/to-v2/#error-handling

如何与 DI 容器集成

如果您想使用 DI 容器,您可以使用相应的解析器来利用它。

<?php
/** @var \Interop\Container\ContainerInterface $container */
$actionResolver = new \bitExpert\Adroit\Action\Resolver\ContainerActionResolver($container);
/** @var \Interop\Container\ContainerInterface $container */
$responderResolver = new \bitExpert\Adroit\Responder\Resolver\ContainerAwareResponderResolver($container);

// Adrenaline will use your containers for resolving actions and responders
$adrenaline = new Adrenaline([$actionResolver], [$responderResolver]);

有关其他说明,您还可以查看 bitexpert/adroit 文档

##许可证

肾上腺素在 Apache 2.0 许可证下发布。