dasprid / dash
灵活的PSR-7兼容HTTP路由器
Requires
- php: ^5.5|^7.0
- psr/http-message: ^1.0
- zendframework/zend-servicemanager: ^3.0.0
Requires (Dev)
- athletic/athletic: ^0.1.8
- phpunit/phpunit: ^4.0|^5.0
- squizlabs/php_codesniffer: ^2.3
- dev-master
- 1.1.0
- 1.0.0
- dev-feature/match-result-simplification
- dev-feature/remove-duplicate-code
- dev-refactoring/make-assemble-name-explicit
- dev-feature/immutability
- dev-feature/port-handling
- dev-feature/response-modifiers
- dev-feature/simplified-parameters
- dev-feature/simplification
- dev-feature/transformers
- dev-feature/specialized-match-result
- dev-feature/response-match-return
- dev-feature/assembly-performance-improvement
- dev-feature/assemble
- dev-feature/segment-caching
- dev-feature/optimizations
- dev-refactor/remove-mvc-namespace
This package is auto-updated.
Last update: 2022-04-15 21:44:33 UTC
README
▄▄
█▀▀▄█░░█▄ ▄▄▄▄▀▀▀▀▀▀▄
▀▄░░██░░█ █▀▀▀▀▀▓▓▓▓▓▓▒▓▄▄▓▀▄
▄▄▄▄▄▄ █▄ ▄▄█░░▀▄░█ ▄▄█▀▄▄▀▀█▒▒▒▄▄▀░▀▀██
▄█▀▀▀▀▀▀██▓█ █░▀█░░█░█▀▀▄▄█░░░▄▀▀▀▀░░░░░░░█
▄█▄▄▄░░░▒▒▒▀█▓█ ▀▄░█▀█▀▀█▀▄█▄▄▄▀░░░░▀▀█▀▀██░█
▀▀▄▓▓▓▒▒█▄▀▄ ▄▄█▀▀▄░░░█ █░░░░░░ ▀███░░░█▄
▀▄▄▓░▒▒▀█▄█▀▀▀▀▒▀█▄█▀░░█▀▀▀▀▀░█░░░░░░░░░░░▄░█
▀▀▄▄▓▓░░░░░▓▓▓▓▄█ ▀▄▄░▀░░░░░░░░░▄▄▄▄▄▄▄▄▄▄▀▀
▀▄▓▓▓▓▓▄▄▄▀ █▓▒░░░░░░░░░░░█▄▀▀▀█▄▄▄▄▄▄▄
▀▀▀▀▀ ▄▀█░▓▒░░░░▄░░░█░▀░▄▄░░█▒▒▒▒▒▒▒█
▄▄▄▀▀░░░░░░░░▄██▀▀▀▀▀▀█▀░░█▀▀▀▄▄▄▀
DASH █░░░░░▄▄▀█▄▄▄▀▀ █░░░█
█░░▄▄█▒▒▄▀ █░▄▀
▀▀▀ ▀▀▀ ▀
Dash最初旨在作为Zend Framework 3的路由器,但现在已发展成一个独立的包。它依赖于ZF的ServiceManager,但仅用于其插件管理器实现。
安装
Dash应与依赖容器一起使用,但在理论上也可以不使用容器。在通常情况下,如果您使用Dash与另一个提供依赖容器的框架一起使用,则配置目录中会放置一个文件,其中包含所有必须注册的工厂。这些工厂假定您的容器也通过名称"config"提供配置数组。有关其具体内容,请参阅下面的示例。
在您的应用程序中,您可以通过实例化Dash\ConfigProvider
轻松检索依赖配置。由于它实现了__invoke()方法,因此可以与expressive-config-manager之类的配置管理器一起使用。
路由配置
路由配置从ZF2大大简化了,现在路由有三个(可选)键索引数组作为前三个参数,快捷参数的格式为
[path, defaults, methods]
这可能会感觉反直觉,但想法是最常更改的参数排在最前面,因此在定义子路由时可以跳过要继承的参数。
path
将期望一个字符串,而defaults
将期望一个数组,method
将期望一个应匹配该路由的方法数组、单个方法字符串或字符串'*'
以匹配所有方法。空字符串''
不匹配任何方法。目前,不传递方法默认为'*'
。
除了索引快捷参数外,还可以通过键值对传递命名配置
[
'path' => '/foo',
'defaults' => ['action' => 'bar', 'controller' => 'FooController'],
'methods' => ['get', 'post']
]
参数和命名值可以混合,尽管前面三个索引项将始终假定是参数,按照上述顺序。
子路由
可以在父路由的配置中的children
键中简单地定义子路由。
'dash' => [
'routes' => [
'user' => ['/user', ['action' => 'index', 'controller' => 'UserController'], 'children' => [
'create' => ['/create', ['action' => 'create'], ['get', 'post']],
'edit' => ['/edit/:id', ['action' => 'edit'], ['get', 'post'], 'constraints' => ['id' => '\d+']],
'delete' => ['/delete/:id', ['action' => 'delete'], 'get', 'constraints' => ['id' => '\d+']],
]],
],
],
路由类型
路由器不再有多个路由类型,而是由Generic
路由处理所有HTTP路由方面。不再在配置中指定路由类型,路由器现在可以根据配置本身处理所有路由。
例如,如果只想让给定路由匹配特定主机名,只需在路由配置中定义正确的键值对即可
'user' => ['/user', ['action' => index', 'controller' => 'UserController'], 'get', 'hostname' => 'login.example.com']
同样,如果给定路由应仅匹配https协议
'user' => ['/user', ['action' => index', 'controller' => 'UserController'], 'get', 'secure' => true]
超载
一个预计会是个小问题的混淆是,如何在不同的模块中如何重载给定的路由参数。这可以通过定义配置中相关的键值对来实现,该键值对旨在覆盖路由。通过快捷键重写路由参数不会生效,因为它只会被添加到配置数组的末尾。
Module A
'user' => ['/user', ['action' => index', 'controller' => 'UserController'], 'get']
Module B
'user' => ['path' => '/userinfo']
/user
现在将不再匹配,但 /userinfo
将会匹配。
开发
在进行性能相关的更改时,请确保比较主分支和您的分支之间的基准测试。要运行它们,执行以下命令:
php vendor/bin/athletic -p benchmark -b vendor/autoload.php