#icRouter Different approach for standard routing problem. Instead of using regular expressions, matching tree is built.
This library will not work with older versions of PHP. Minimal version is 5.3
use IgorCrevar\icRouter\Router;
use IgorCrevar\icRouter\Route;
use IgorCrevar\icRouter\Interfaces\DefImpl\DefaultNodeBuilder;
$router = new Router(new DefaultNodeBuilder());
$router->setRoutes([
new Route('simple', '/simple',
array('module' => 'simple')),
new Route('simple_param', '/param/:a',
array('module' => 'simple_param', 'a' => 10),
array('a' => '\d+')), // a is integer
new Route('two_params', '/param/hello/:a/some/:b',
array('module' => 'two_params', 'a' => 10, 'onemore' => 'time')),
new Route('two_params_any', '/home/hello/:a/:b/*',
array('module' => 'two_params_any', 'a' => 10, 'b' => '10'),
array('b' => '[01]+')), // b is string / number of 0' and 1'
new Route('complex_param', '/complex/id_:id',
array('module' => 'complex_param'),
array('id' => '\d+')),
new Route('home', '/*',
array('module' => 'home')),
]);
$router->build();
$result = $router->match('/a/b/c/d/e');
$result will be array of matching parameters (key value pairs) if route exists otherwise false is returned
$result = $router->generate('two_params', array('b' => 'aabb'));
First parameter is route name, second is parameters (key value pairs) array
- name of route
- patterns:
Examples:
- /acount/:id/* - provides functionality for additional parameters
- /account/:id/:action
- /account/id_:id Parameter is specified with /:[A-Za-z0-9]+/ Only one parameter is allowed per route segment
- optional default parameters for route (key - value pairs)
- optional regex for parameters in pattern
Examples:
- array('id' => '\d+') - id is integer
- array('type' => 'car|boat|plane') - type is either car or boat or plane
For production, because $router->build() is expensive you should cache already built router (APC, serializing, etc...)
Go to base dir and execute:
phpunit test/RouterTest.php
perfomance banchmark beetween this library and some
regular expression routing library like one from symfony framework or similar.