danack/slim-auryn-invoker

允许通过Auryn分发路由调用者。

2.2.0 2019-06-22 10:35 UTC

This package is auto-updated.

Last update: 2024-09-05 03:35:55 UTC


README

Build Status

此库允许您将Auryn依赖注入库作为Slim框架应用的调度层。

它替换了内置的执行路由调用者的调度器,并通过Auryn执行调用者。

它不会影响中间件的分发。

快速入门

如果您通过Composer安装此库,将此库链接到Slim应用中,您需要做的只是创建Slim应用时设置'foundHandler'。

<?php

use Danack\SlimAurynInvoker\SlimAurynInvokerFactory;

$container = new \Slim\Container;
$container['foundHandler'] = new SlimAurynInvokerFactory($injector);
$app = new \Slim\App($container);

示例目录中有示例应用

您为什么应该使用此库

使用Auryn作为执行应用程序控制器的工具有两个主要原因;它允许您使用接口分离来传递参数,并且允许您的控制器返回简单的'stub response'类型,而不是必须触及PSR 7响应对象。

参数的接口分离

@todo - 解释为什么接口分离对控制器来说如此出色。

我在几个用户组和PHPNW上做过一次演讲 - https://www.youtube.com/watch?v=YKXfOYTBaI4,幻灯片可在此处找到。

简单的类型化返回值

我非常相信,大多数情况下,应该由框架连接一个从控制器到将实际将其发送给用户的底层库的'stub response'。

SlimAurynInvoker允许您返回一个只包含状态码、主体和控制器希望作为响应发送的一组头的'stub response'对象。该库

这使得生活更加愉快。比较两个等效的控制器。第一个控制器直接修改响应对象。

function psr7JsonController(Request $request, Response $response)
{
    $data = ['foo' => 'bar'];
    $json = json_encode($data);

    $response->getBody()
      ->write($json)
      ->withHeader('Content-type', 'application/json');
      return $response;
}

第二个控制器简单地返回一个stub JsonResponse。

function simpleJsonController(Request $request, Response $response)
{
    $data = ['foo' => 'bar'];

    return new JsonResponse($data);
}

通过返回stub响应对象,它不仅从您的控制器中删除了大量繁琐的代码,而且也更容易

  • 了解控制器返回的数据类型。
  • 在一个地方管理为哪种响应类型发送哪些头的详细信息,而不是必须更改返回该类型的每个控制器。
  • 测试您的控制器是否返回正确的数据类型。

设置和结果处理

用户可以控制控制器分发前后步骤。默认情况下,步骤如下定义

在控制器分发之前设置

默认情况下,SlimAurynInvoker执行以下操作。

  • 通过注入器共享请求对象,以便控制器可以作为依赖项拥有它。
  • 通过注入器共享响应对象,以便控制器可以作为依赖项拥有它。
  • 将路由参数定义为命名参数,以便控制器可以通过名称将路由参数作为依赖项。
  • 创建并共享一个 \Danack\SlimAurynInvoker\RouteParams 对象,以便控制器可以通过类型作为依赖项获得路由参数。

结果处理

默认情况下,在调度控制器后,SlimAurynInvoker 将

  • 如果控制器返回了类型为 \Danack\Response\StubResponse 的对象,SlimAurynInvoker 将 将其映射到 Psr 7 响应对象

  • 如果返回的是 Psr 7 Response 类型的对象,SlimAurynInvoker 将直接将其传递回 Slim。

自定义设置和结果处理

如果您想自定义设置或结果处理功能,可以通过将适当的可调用对象作为 $resultMappers 和/或 $setupFunction 传递给 \Danack\SlimAurynInvoker\SlimAurynInvokerFactory 来实现。

结果映射器数组应该是一个数组,键是控制器返回的类型,值是具有以下签名的可调用对象:

function ($builtResponse, ResponseInterface $response);

设置可调用对象应具有此签名

function(
        Injector $injector,
        ServerRequestInterface $request,
        ResponseInterface $response,
        array $routeArguments
    );

在文件 ./example/public/index_html.php 中有一个示例,展示了一个替代结果映射器的用法。它展示了如何配置 SlimAurynInvoker,以便每个控制器都可以只返回一个字符串,该字符串会自动发送为 HTML 响应。

运行示例

在 example 文件夹中有一个简单的示例应用程序,可以通过使用 PHP 的内置网络服务器运行。您可以通过运行以下命令来运行它:

php -S 0.0.0.0:8000 -t example/public

在库的根目录下,然后在浏览器中转到 http://127.0.0.1:8000/

此外,还有一个控制器只返回字符串并映射为 HTML 响应的示例,位于 http://127.0.0.1:8000/index_html.php

注意

如何运行单元测试

php vendor/bin/phpunit -c test/phpunit.xml

如何运行代码风格检查

php vendor/bin/phpcs --standard=./test/codesniffer.xml --encoding=utf-8 --extensions=php -p -s lib