diff --git a/AltoRouter.php b/AltoRouter.php index ee0759b..840a694 100644 --- a/AltoRouter.php +++ b/AltoRouter.php @@ -22,8 +22,8 @@ class AltoRouter { * @param array $matchTypes */ public function __construct( $routes = array(), $basePath = '', $matchTypes = array() ) { - $this->basePath = $basePath; - $this->matchTypes = array_merge($this->matchTypes, $matchTypes); + $this->setBasePath($basePath); + $this->addMatchTypes($matchTypes); foreach( $routes as $route ) { call_user_func_array(array($this,'map'),$route); @@ -39,11 +39,11 @@ class AltoRouter { } /** - * Add a new named match type. It uses array_merge so keys can be overwritten. + * Add named match types. It uses array_merge so keys can be overwritten. * - * @param array $matchType The key is the name and the value is the regex. + * @param array $matchTypes The key is the name and the value is the regex. */ - public function addMatchType($matchTypes) { + public function addMatchTypes($matchTypes) { $this->matchTypes = array_merge($this->matchTypes, $matchTypes); } diff --git a/AltoRouterTest.php b/AltoRouterTest.php index 16199a0..0474f8a 100644 --- a/AltoRouterTest.php +++ b/AltoRouterTest.php @@ -268,7 +268,7 @@ class AltoRouterTest extends PHPUnit_Framework_TestCase public function testMatchWithCustomNamedRegex() { - $this->router->addMatchType(array('cId' => '[a-zA-Z]{2}[0-9](?:_[0-9]++)?')); + $this->router->addMatchTypes(array('cId' => '[a-zA-Z]{2}[0-9](?:_[0-9]++)?')); $this->router->map('GET', '/bar/[cId:customId]', 'bar_action', 'bar_route'); $this->assertEquals(array( diff --git a/README.md b/README.md index 9d82dbc..483cf19 100644 --- a/README.md +++ b/README.md @@ -30,28 +30,49 @@ $router->generate('users_show', array('id' => 5)); ``` -You can use the following limits on your named parameters. AltoRouter will create the correct regexes for you. +**You can use the following limits on your named parameters. AltoRouter will create the correct regexes for you.** + ```php - * // Match all request URIs - [i] // Match an integer - [i:id] // Match an integer as 'id' - [a:action] // Match alphanumeric characters as 'action' - [h:key] // Match hexadecimal characters as 'key' - [:action] // Match anything up to the next / or end of the URI as 'action' - [create|edit:action] // Match either 'create' or 'edit' as 'action' - [*] // Catch all (lazy, stops at the next trailing slash) - [*:trailing] // Catch all as 'trailing' (lazy) - [**:trailing] // Catch all (possessive - will match the rest of the URI) - .[:format]? // Match an optional parameter 'format' - a / or . before the block is also optional - -Some more complicated examples - @/(?[A-Za-z]{2}_[A-Za-z]{2})$ // custom regex, matches language codes like "en_us" etc. - /posts/[*:title][i:id] // Matches "/posts/this-is-a-title-123" - /output.[xml|json:format]? // Matches "/output", "output.xml", "output.json" - /[:controller]?/[:action]? // Matches the typical /controller/action format - +* // Match all request URIs +[i] // Match an integer +[i:id] // Match an integer as 'id' +[a:action] // Match alphanumeric characters as 'action' +[h:key] // Match hexadecimal characters as 'key' +[:action] // Match anything up to the next / or end of the URI as 'action' +[create|edit:action] // Match either 'create' or 'edit' as 'action' +[*] // Catch all (lazy, stops at the next trailing slash) +[*:trailing] // Catch all as 'trailing' (lazy) +[**:trailing] // Catch all (possessive - will match the rest of the URI) +.[:format]? // Match an optional parameter 'format' - a / or . before the block is also optional ``` +**Some more complicated examples** + +```php +@/(?[A-Za-z]{2}_[A-Za-z]{2})$ // custom regex, matches language codes like "en_us" etc. +/posts/[*:title][i:id] // Matches "/posts/this-is-a-title-123" +/output.[xml|json:format]? // Matches "/output", "output.xml", "output.json" +/[:controller]?/[:action]? // Matches the typical /controller/action format +``` + +**The character before the colon (the 'match type') is a shortcut for one of the following regular expressions** + +```php +'i' => '[0-9]++' +'a' => '[0-9A-Za-z]++' +'h' => '[0-9A-Fa-f]++' +'*' => '.+?' +'**' => '.++' +'' => '[^/\.]++' +``` + +**New match types can be added using the `addMatchTypes()` method** + +```php +$router->addMatchTypes(array('cId' => '[a-zA-Z]{2}[0-9](?:_[0-9]++)?')); +``` + + ## Contributors - [Danny van Kooten](https://github.com/dannyvankooten) - [Koen Punt](https://github.com/koenpunt)