vivace/router

简单的http树路由器

dev-master 2017-05-21 18:07 UTC

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

特此授予任何人免费获得本软件及其相关文档文件(以下简称“软件”)的副本的权利,可以在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向软件提供的人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任是根据合同、侵权或其他方式产生的,以及是否与软件或软件的使用或其他交易有关。