vivace / router
简单的http树路由器
Requires
- php: ^7.1
- psr/http-message: ^1.0
Requires (Dev)
- phpunit/phpunit: ^6.0
Suggests
- jasny/http-message: Provides an implementation of psr7
This package is not auto-updated.
Last update: 2024-09-20 19:50:32 UTC
README
这是一个简单快速的路由器,没有其他功能。使用树构建机制快速查找路由。
代码示例
$switcher = new \vivace\router\Switcher([ //To check the URL path in a template, the rule must begin with a slash, for example /foo/bar '/hello/:message' => function (\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response) { return 'Hello ' . $request->getAttribute('message'); }, '/' => function (\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response) { return 'Index Page'; }, 'POST/user' => function (\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response) { return 'Create user'; }, 'GET//:app.mysite.com/user/:id ' => function (\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response) { $app = $request->getAttribute('app'); $id = $request->getAttribute('id'); return "Request to $app for getting user by id=$id"; }, //domain rules should started with double slashes `//` '//admin.mysite.com' => function (\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response) { return 'Admin page'; }, //It supports nested in one another '/api' => new \vivace\router\Switcher([ '/v1' => function () { return 'Nested switcher'; }, '/v2' => new \vivace\router\Switcher([ '/' => function () { return 'Deep nested switcher'; } ]) ]), 'OPTIONS' => function(){ return 'Request with OPTIONS method.'; } ]);
//$request and $response is objects, which implementation of psr-7, this library not contain implementation psr-7, you should use third-party libraries, which do it. $response = $switcher->switch($request, $response); echo $response->getBody()->getContents();
动机
目标是创建一个快速的路由器,支持通过主机进行路由、捕获变量、嵌入。还需要兼容PSR-7。
安装
php composer.phar require vivace/router
API参考
Switcher::case(string $pattern, callable $handler)
添加处理器,如果请求成功匹配模式,则会调用它。
Switcher::switch(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
查找并调用请求的处理程序
Switcher::default(callable $handler)
添加默认处理程序,用于路由未匹配的情况。
测试
通过本地安装的php
phpunit --testsuite=unit --coverage-html=./tests/coverage/
通过docker-compose
docker-compose run --rm phpunit --testsuite=unit --coverage-html=./tests/coverage/
贡献者
Albert Sultanov bert.sultanov.contact@gmail.com
许可证
版权所有 (c) 2017 Albert Sultanov
特此授予任何人免费获得本软件及其相关文档文件(以下简称“软件”)的副本的权利,可以在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向软件提供的人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任是根据合同、侵权或其他方式产生的,以及是否与软件或软件的使用或其他交易有关。