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目前所做的那样。 - 应用程序路由器的名称在配置中通过
app_router_path
键定义。 - 应用程序路由器在应用程序的根命名空间中定义了一个名为
Router
的类,它扩展了Gt\Routing\AbstractRouter
。 - 调用BaseRouter的
go()
方法,提供一个PSR-7RequestInterface
,这将调用应用程序路由器中的函数。 - 应用程序路由器可以有任意数量的函数。通过添加扩展
Route
的属性,它们被制成“可路由的”。可用的属性包括Get
、Post
(和其他HTTP动词)或Any
以匹配所有动词。 - 最简单的可路由函数具有无参数的Any属性(
#[Any()]
),它将执行每个请求。 - 可用的属性参数包括:
name
为路由提供一个名称以供将来参考,accept
提供要匹配请求的Accept
头的内容类型,path
定义一个匹配路径(带模式匹配),function
定义要调用的函数。 - 只有具有与传入请求匹配属性的函数才会执行。
- 应用程序的可路由函数的职责是为路由器的
Assembly
对象添加适当的视图和逻辑文件。然后,框架(以我为例的WebEngine)将使用这些Assembly对象构建适当的View
并按正确的顺序执行适当的Logic
对象。
待办事项列表
- 当有多个匹配项时执行内容协商。例如:API路由可能明确接受“application/xml”,但网络浏览器的默认接受头也发送此内容,但对于页面请求,它给出了q=0.9的值 - 只要存在具有更高q值的text/html或application/xhtml+xml的路由,就应该优先考虑。
- 接收RequestInterface和项目目录,并构建适当的Assembly对象 - 将URL路径与目录路径匹配,在适当的位置提取动态路径。