danack / slim-dispatcher
允许通过提供的调用者分发路由调用者
Requires
- php: >=8.0.0
Requires (Dev)
- danack/php-unit-helper: ^0.5.0
- laminas/laminas-diactoros: ^2.6.0
- mockery/mockery: ^1.2.0
- phpunit/phpunit: 9.5.6
- psr/http-message: ^1.0.1
- slim/slim: 4.10.0
- squizlabs/php_codesniffer: ^3.6.0
- yoast/yoastcs: 1.0
This package is auto-updated.
Last update: 2024-08-30 01:38:30 UTC
README
此库允许您将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响应'类型,而不是必须触摸PSR 7响应对象。
参数的接口分离
@todo - 解释为什么接口分离对控制器来说如此出色。
我在几个用户组以及PHPNW上做过一次演讲 - https://www.youtube.com/watch?v=YKXfOYTBaI4,该演讲的幻灯片可在这里找到。
简单的类型化返回值
我坚信,大多数时候,应该由框架连接从控制器到将实际发送给用户的底层库的'stub响应'。
SlimAurynInvoker允许您返回一个只包含状态码、主体和控制器希望作为响应发送的一组标头的'stub响应'对象。此库
这使得生活更加愉快。比较两个等效的控制器。第一个控制器直接修改响应对象。
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 响应发送。
运行示例
示例文件夹中有一个简单的示例应用程序,可以使用 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