qlimix/regex-http-router

1.0.2 2020-02-13 19:30 UTC

This package is auto-updated.

Last update: 2024-09-14 06:27:16 UTC


README

Travis CI Coveralls Packagist MIT License

Regex HTTP-Router

安装

使用 Composer

$ composer require qlimix/regex-http-router

使用

将路由添加到容器中。使用 Method 对象创建任何方法。

定位器应该能够通过传递给路由的处理程序找到处理对象。

<?php

use Qlimix\Http\Router\Container;
use Qlimix\Http\Router\Method;
use Qlimix\Http\Router\HttpRoute;

$container = new Container();

$container->add(new HttpRoute(Method::createGet(), '/foo', 'foo.list', []));

通过配置器将路由添加到容器中。

<?php

use Qlimix\Http\Router\Configurator;
use Qlimix\Http\Router\Container;
use Qlimix\Http\Router\Regex\PlaceHolder;
use Qlimix\Http\Router\Regex\PlaceHolderMatcher;
use Qlimix\Http\Router\Regex\Registry;
use Qlimix\Http\Router\Tokenize\CharTokenizer;
use Qlimix\Http\Router\Tokenize\PlaceHolderTokenizer;
use Qlimix\Http\Router\Tokenize\Tokenizer;

$container = new Container();
$registry = new Registry();

$tokenizer = new Tokenizer([
    new PlaceHolderTokenizer(),
    new CharTokenizer(),
]);

$placeHolderMatcher = new PlaceHolderMatcher($tokenizer, $registry);

$configurator = new Configurator($container, $placeHolderMatcher);

$configurator->get('/foo', 'foo.list', []);
$configurator->get('/foo/{id}', 'foo.list', [new PlaceHolder('id', '([\d]+)')]);
$configurator->post('/foo', 'foo.create', []);
$configurator->put('/foo/{id}', 'foo.update', [new PlaceHolder('id', '([\d]+)')]);
$configurator->patch('/foo/{id}', 'foo.patch', [new PlaceHolder('id', '([\d]+)')]);
$configurator->head('/foo/{id}', 'foo.head', [new PlaceHolder('id', '([\d]+)')]);
$configurator->delete('/foo/{id}', 'foo.delete', [new PlaceHolder('id', '([\d]+)')]);
$configurator->options('/foo/{id}', 'foo.options', [new PlaceHolder('id', '([\d]+)')]);

如果使用配置器,可以在注册表中添加全局占位符。

<?php

use Qlimix\Http\Router\Regex\PlaceHolder;
use Qlimix\Http\Router\Regex\Registry;

$registry = new Registry();
$registry->add(new PlaceHolder('id', '([\d]+)'));

生成正则表达式。

<?php

use Qlimix\Http\Router\Container;
use Qlimix\Http\Router\Match\Builder;
use Qlimix\Http\Router\Match\MatchBuilder;
use Qlimix\Http\Router\Match\MatcherIteratorFactory;
use Qlimix\Http\Router\Tokenize\CharTokenizer;
use Qlimix\Http\Router\Tokenize\PlaceHolderTokenizer;
use Qlimix\Http\Router\Tokenize\Tokenizer;

$container = new Container();

$builder = new Builder(new MatcherIteratorFactory());

$tokenizer = new Tokenizer([
    new PlaceHolderTokenizer(),
    new CharTokenizer(),
]);

$matchBuilder = new MatchBuilder($builder, $tokenizer);

$regex = $matchBuilder->build($container->getAll());

使用路由器。

<?php

use Qlimix\Http\Router\Container;
use Qlimix\Http\Router\Regex\Matcher;
use Qlimix\Http\Router\RegexHttpRouter;

$container = new Container();
$matcher = new Matcher('regex');
$httpRouter = new RegexHttpRouter($container, $matcher);

$route = $httpRouter->route($request);

测试

要使用 PHPUnit 在本地运行所有单元测试

$ vendor/bin/phpunit

质量

为了确保代码质量,运行 grumphp,它将运行所有工具

$ vendor/bin/grumphp run

贡献

有关详细信息,请参阅CONTRIBUTING