danack/slim4-auryn-invoker

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

0.1.1 2023-01-19 14:39 UTC

This package is auto-updated.

Last update: 2024-09-19 18:29:20 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);

example目录中有示例应用

为什么您应该使用此库

使用Auryn作为执行您应用控制器工具的主要原因是两个:它允许您使用接口分离来传递参数,并允许您的控制器返回简单的“占位响应”类型,而不是必须触摸PSR 7响应对象。

参数的接口分离

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

我在几个用户组以及PHPNW做过一次演讲 - https://www.youtube.com/watch?v=YKXfOYTBaI4,其幻灯片在此处可用here

简单的类型化返回值

我非常坚信,大多数时候,应该由框架来连接控制器从“占位响应”到实际将发送给用户的底层库。

SlimAurynInvoker允许您返回一个仅包含状态码、主体和控制器希望发送作为响应的头部集合的“占位响应”对象。此库

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

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

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

第二个控制器简单返回一个占位JsonResponse。

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

    return new JsonResponse($data);
}

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

  • 理解控制器返回的数据类型。
  • 在单个位置管理发送给响应类型的头部细节,而不是必须修改每个返回该类型的控制器。
  • 测试控制器返回正确的数据类型。

设置和结果处理

用户可以控制控制器分派之前和之后采取的步骤。默认情况下,步骤如下定义

在控制器分派之前设置

默认情况下,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 响应。

运行示例

在示例文件夹中有一个简单的示例应用程序,可以使用 PHP 内置的 web 服务器运行。您可以按以下方式运行它:

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