phpgt / routing
将HTTP请求路由到您的代码。
v1.1.2
2023-10-24 17:57 UTC
Requires
- php: >=8.0
- phpgt/config: ^1.1.0
- phpgt/http: ^1
- phpgt/servicecontainer: 1.*
- phpgt/typesafegetter: ^1.2.2
- psr/http-message: ^2
- willdurand/negotiation: ^3.0
Requires (Dev)
- phpmd/phpmd: ^2.13
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.2
- squizlabs/php_codesniffer: ^3.7
This package is auto-updated.
Last update: 2024-09-06 15:16:37 UTC
README
当应用接收到HTTP请求时,需要调用适当的逻辑方法,并加载某些文件以构建正确的视图。这是通过获取HTTP请求并将它 路由 到应用源代码的匹配区域来完成的。
该存储库将路由的概念分解为三个责任区域
- 将HTTP请求匹配到适当的回调函数。
- 创建一个逻辑和视图文件的集合,以匹配请求。
- 处理这些集合,以创建正确的HTTP响应。
当在此存储库中提到请求时,我们始终指的是一个 PSR-7 HTTP消息。
规划
主流程
- 您的应用可以在项目根目录中有一个
router.php
文件,但由于WebEngine提供了router.default.php
,因此这完全是可选的。您可以使用router.php文件添加复杂的规则,定义用于构建响应的源文件,而不是像WebEngine当前所做的那样,始终限于使用基于路径的规则。 - 应用的router名称通过配置中的
app_router_path
键定义。 - 应用router在应用的根命名空间中定义了一个名为
Router
的类,它扩展了Gt\Routing\AbstractRouter
。 - 调用BaseRouter的
go()
方法,提供一个PSR-7RequestInterface
,这将调用应用router的函数。 - 应用router可以有任意数量的函数。通过添加扩展
Route
的属性来使它们“可路由”。可用的属性包括Get
、Post
(和其他HTTP动词)或Any
以匹配所有动词。 - 最简单的可路由函数具有没有任何参数的Any属性(
#[Any()]
),它将执行每个请求。 - 可用的属性参数包括:
name
为路由提供名称以供将来引用,accept
提供一个Content-type以匹配请求的Accept
头,path
定义一个匹配路径(使用模式匹配),function
定义要调用的函数。 - 只有具有与传入请求匹配的属性的函数才会执行。
- 应用的可路由函数的职责是向Router的
Assembly
对象添加适当的视图和逻辑文件。然后,框架(以我的案例中的WebEngine为例)将使用Assembly对象构建适当的View
并以正确的顺序执行适当的Logic
对象。
待办事项列表
- 当有多个匹配项时执行内容协商。例如:API路由可能明确接受“application/xml”,但网页浏览器的默认接受头也会发送此内容类型,但它将其q值设置为0.9 - 只要存在具有更高q值的text/html或application/xhtml+xml的路由,它就应该优先。
- 接收RequestInterface和项目目录,构建适当的Assembly对象 - 将URL路径与目录路径匹配,在适当的位置提取动态路径。