PHP Classes

icRouter: Route accesses based on request parameters

Recommend this page to a friend!
  Info   View files View files (16)   DownloadInstall with Composer Download .zip   Reputation   Support forum (1)   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2021-11-22 (10 months ago) RSS 2.0 feedStarStarStar 52%Total: 677 All time: 4,760 This week: 209Up
Version License PHP version Categories
icrouter 0.91MIT/X Consortium ...5.3HTTP, PHP 5, Design Patterns
Description Author

This package can route accesses based on request parameters.

It can get the HTTP request parameters and determine which controller action should be dispatched based on routes that can be defined by URL patterns similar to Symfony framework routing subsystem.

The package can return the request parameters from a matched rule.

Picture of Igor Crevar
Name: Igor Crevar <contact>
Classes: 2 packages by
Country: Serbia Serbia
Age: 40
All time rank: 262911 in Serbia Serbia
Week rank: 544 Up4 in Serbia Serbia Up



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;

Create router

$router = new Router(new DefaultNodeBuilder());

Add some routes

    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')),

Build route tree



$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

Route constructor parameters

  • name of route
  • patterns: Examples: 1. /acount/:id/* - provides functionality for additional parameters 2. /account/:id/:action 3. /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: 1. array('id' => '\d+') - id is integer 2. 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...)

Unit Testing

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.

  Files folder image Files  
File Role Description
Files folder imagesrc (1 directory)
Files folder imagetest (1 file)
Accessible without login Plain text file composer.json Data composer.json
Accessible without login Plain text file LICENSE Lic. LICENSE
Accessible without login Plain text file Data readme

  Files folder image Files  /  src  
File Role Description
Files folder imageIgorCrevar (1 directory)

  Files folder image Files  /  src  /  IgorCrevar  
File Role Description
Files folder imageicRouter (3 files, 2 directories)

  Files folder image Files  /  src  /  IgorCrevar  /  icRouter  
File Role Description
Files folder imageInterfaces (1 file, 1 directory)
Files folder imageNodes (7 files)
  Plain text file Route.php Class Defines Route
  Plain text file Router.php Class Main class
  Plain text file RouterException.php Class Exception class

  Files folder image Files  /  src  /  IgorCrevar  /  icRouter  /  Interfaces  
File Role Description
Files folder imageDefImpl (1 file)
  Plain text file INodeBuilder.php Class Interface for node builder

  Files folder image Files  /  src  /  IgorCrevar  /  icRouter  /  Interfaces  /  DefImpl  
File Role Description
  Plain text file DefaultNodeBuilder.php Class Default implementation od node builder

  Files folder image Files  /  src  /  IgorCrevar  /  icRouter  /  Nodes  
File Role Description
  Plain text file ARouteNode.php Class Abstract tree node class
  Plain text file RouteNode.php Class Static route node
  Plain text file RouteNodeLeaf.php Class Leaf node
  Plain text file RouteNodeLeafAny.php Class * lead node
  Plain text file RouteNodeParam.php Class Node with pattern param
  Plain text file RouteNodeParamSimple.php Class Node with simple parameter
  Plain text file RouteNodeRoot.php Class Root node

  Files folder image Files  /  test  
File Role Description
  Accessible without login Plain text file RouterTest.php Test phpunit tests

 Version Control Unique User Downloads Download Rankings  
This week:0
All time:4,760
This week:209Up
User Ratings User Comments (1)
 All time
For more information send a message to info at phpclasses dot org.