User:Varnent/sandbox

PathRouter class.

This class can take patterns such as /wiki/$1 and use them to parse query parameters out of REQUEST_URI paths.

$router->add( "/wiki/$1" );
 * Matches /wiki/Foo style urls and extracts the title

$router->add( array( 'edit' => "/edit/$1" ), array( 'action' => '$key' ) );
 * Matches /edit/Foo style urls and sets action=edit

$router->add( '/$2/$1', array( 'variant' => '$2' ),  array( '$2' => array( 'zh-hant', 'zh-hans' ) );
 * Matches /zh-hant/Foo or /zh-hans/Foo

$router->addStrict( "/foo/Bar", array( 'title' => 'Baz' ) );
 * Matches /foo/Bar explicitly and uses "Baz" as the title

$router->add( '/help/$1', array( 'title' => 'Help:$1' ) );
 * Matches /help/Foo with "Help:Foo" as the title

$router->add( '/$1', array( 'foo' => array( 'value' => 'bar$2' ) );
 * Matches /Foo and sets 'foo' to 'bar$2' without $2 being replaced

$router->add( '/$1', array( 'data:foo' => 'bar' ), array( 'callback' => 'functionname' ) );
 * Matches /Foo, adds the key 'foo' with the value 'bar' to the data array and calls functionname( &$matches, $data );

Path patterns

 * Paths may contain $# patterns such as $1, $2, etc...
 * $1 will match 0 or more while the rest will match 1 or more
 * Unless you use addStrict "/wiki" and "/wiki/" will be expanded to "/wiki/$1"

Parameters

 * In a pattern $1, $2, etc... will be replaced with the relevant contents
 * If you used a keyed array as a path pattern, $key will be replaced with the relevant contents
 * The default behavior is equivalent to  - if you don't want the title parameter you can explicitly use
 * You can specify a value that won't have replacements in it using

Options

 * The option keys $1, $2, etc... can be specified to restrict the possible values of that variable. A string can be used for a single value, or an array for multiple.
 * When the option key 'strict' is set (Using addStrict is simpler than doing this directly) the path won't have $1 implicitly added to it.
 * The option key 'callback' can specify a callback that will be run when a path is matched. The callback will have the arguments ( &$matches, $data ) and the matches array can be modified.