mirror of
https://github.com/dannyvankooten/AltoRouter.git
synced 2025-08-01 14:10:31 +02:00
Merge pull request #47 from koenpunt/match-type-fixup
Minor changes for matchTypes
This commit is contained in:
@@ -22,8 +22,8 @@ class AltoRouter {
|
|||||||
* @param array $matchTypes
|
* @param array $matchTypes
|
||||||
*/
|
*/
|
||||||
public function __construct( $routes = array(), $basePath = '', $matchTypes = array() ) {
|
public function __construct( $routes = array(), $basePath = '', $matchTypes = array() ) {
|
||||||
$this->basePath = $basePath;
|
$this->setBasePath($basePath);
|
||||||
$this->matchTypes = array_merge($this->matchTypes, $matchTypes);
|
$this->addMatchTypes($matchTypes);
|
||||||
|
|
||||||
foreach( $routes as $route ) {
|
foreach( $routes as $route ) {
|
||||||
call_user_func_array(array($this,'map'),$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);
|
$this->matchTypes = array_merge($this->matchTypes, $matchTypes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -268,7 +268,7 @@ class AltoRouterTest extends PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
public function testMatchWithCustomNamedRegex()
|
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->router->map('GET', '/bar/[cId:customId]', 'bar_action', 'bar_route');
|
||||||
|
|
||||||
$this->assertEquals(array(
|
$this->assertEquals(array(
|
||||||
|
59
README.md
59
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
|
```php
|
||||||
* // Match all request URIs
|
* // Match all request URIs
|
||||||
[i] // Match an integer
|
[i] // Match an integer
|
||||||
[i:id] // Match an integer as 'id'
|
[i:id] // Match an integer as 'id'
|
||||||
[a:action] // Match alphanumeric characters as 'action'
|
[a:action] // Match alphanumeric characters as 'action'
|
||||||
[h:key] // Match hexadecimal characters as 'key'
|
[h:key] // Match hexadecimal characters as 'key'
|
||||||
[:action] // Match anything up to the next / or end of the URI as 'action'
|
[:action] // Match anything up to the next / or end of the URI as 'action'
|
||||||
[create|edit:action] // Match either 'create' or 'edit' as 'action'
|
[create|edit:action] // Match either 'create' or 'edit' as 'action'
|
||||||
[*] // Catch all (lazy, stops at the next trailing slash)
|
[*] // Catch all (lazy, stops at the next trailing slash)
|
||||||
[*:trailing] // Catch all as 'trailing' (lazy)
|
[*:trailing] // Catch all as 'trailing' (lazy)
|
||||||
[**:trailing] // Catch all (possessive - will match the rest of the URI)
|
[**: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
|
.[: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
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**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
|
## Contributors
|
||||||
- [Danny van Kooten](https://github.com/dannyvankooten)
|
- [Danny van Kooten](https://github.com/dannyvankooten)
|
||||||
- [Koen Punt](https://github.com/koenpunt)
|
- [Koen Punt](https://github.com/koenpunt)
|
||||||
|
Reference in New Issue
Block a user