PHP Ruby
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.phan
build
docs
src
tests
.gitattributes
.gitignore
.scrutinizer.yml
.travis.yml
LICENSE
README.md
Rakefile
apigen.neon
composer.json
phpdox.xml.dist
phpunit
phpunit.xml.dist

README.md

Teto Routing - PHP simple router

Join the chat at https://gitter.im/BaguettePHP/simple-routing Package version Build Status Packagist Scrutinizer Code Quality Code Coverage

Simple routing for WebApp

No magic. No reflection. No complex dependency.

Installation

Composer

composer require zonuexe/simple-routing

References

Routing DSL

//    Method      Path           ReturnValue  Param => RegExp     extension (format)
$routing_map = [
    ['GET',      '/',            'index'  ],
    ['GET|POST', '/search',      'search' ],
    ['GET',      '/article/:id', 'article',  ['id' => '/\A(\d+)\z/'], '?ext' => ['', 'txt']],
    ['GET',      '/info',        'feed' ,                             '?ext' => ['rss', 'rdf', 'xml']],
     '#404'       =>             'not_found' // special
];

$router = new \Teto\Routing\Router($routing_map);
$action = $router->match($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);

// Shorthand (but, do not use reverse routing)
$action = \Teto\Routing\Router::dispatch($routing_map, $_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);

Reverse routing

//   Name         Method      Path            ReturnValue  Param => RegExp     extension (file format)
$routing_map = [
    'root'    => ['GET',      '/',            'index'  ],
    'search'  => ['GET|POST', '/search',      'search' ],
    'article' => ['GET',      '/article/:id', 'article',  ['id' => '/\A(\d+)\z/'], '?ext' => ['', 'txt']],
    'info'    => ['GET',      '/info',        'feed' ,                             '?ext' => ['rss', 'rdf', 'xml']],
    '#404'    =>                              'not_found' // special
];

$router = new \Teto\Routing\Router($routing_map);

$router->makePath('root');    //=> '/'
$router->makePath('search');  //=> '/search'
$router->makePath('article', ['id' => 123]);     //=> '/article/123'
$router->makePath('info',    ['?ext' => 'rss']); //=> '/info.rss'

Tips

$re_num_id    = '/\A(\d+)\z/';
$re_user_name = '/\A@([a-z]+)\z/';

$routing_map = [
    'root'    => ['GET', '/',            'index'  ],
    'search'  => ['GET', '/search',      'search' ],
    'article' => ['GET', '/article/:id', 'article',  ['id' => $re_num_id], '?ext' => ['', 'txt']],
    '#404'    =>                         'not_found' // special
];

Related Libraries

You can get these libraries from Packagist.

Copyright

Teto\Routing is licensed under Apache License Version 2.0. See ./LICENSE.

Teto Routing - PHP simple router for WebApp
Copyright (c) 2016 Baguette HQ / USAMI Kenta <tadsan@zonu.me>

Teto Kasane

I love Teto Kasane. (ja: Teto Kasane official site)

       r /
  __ , --ヽ!-- .、_
 !  `/::::;::::ヽ l
 !二二!::/}::::丿ハニ|
 !ニニ.|:/ ノ/ }::::}コ
 L二lイ  0´ 0 ,':ノコ
 lヽノ/ヘ、 '' ▽_ノイ ソ
  ソ´ /}`ス / ̄ ̄ ̄ ̄/
   .(_:;つ/  0401 / カタカタ
  ̄ ̄ ̄ ̄ ̄\/____/