adding support for filter patterns.

Signed-off-by: Taylor Otwell <taylorotwell@gmail.com>
This commit is contained in:
Taylor Otwell 2012-02-27 22:36:28 -06:00
parent 9954482194
commit 01ddff5cdc
2 changed files with 23 additions and 3 deletions

View File

@ -13,6 +13,13 @@ class Filter {
*/
public static $filters = array();
/**
* The route filters that are based on pattern.
*
* @var array
*/
public static $patterns = array();
/**
* All of the registered filter aliases.
*
@ -39,8 +46,18 @@ public static function register($name, Closure $callback)
{
if (isset(static::$aliases[$name])) $name = static::$aliases[$name];
if (starts_with($name, 'pattern: '))
{
foreach (explode(', ', substr($name, 9)) as $pattern)
{
static::$patterns[$pattern] = $callback;
}
}
else
{
static::$filters[$name] = $callback;
}
}
/**
* Alias a filter so it can be used by another name.

View File

@ -116,10 +116,13 @@ protected static function format($uri)
* Determine if the current URI matches a given pattern.
*
* @param string $pattern
* @param string $uri
* @return bool
*/
public static function is($pattern)
public static function is($pattern, $uri = null)
{
$uri = $uri ?: static::current();
// Asterisks are translated into zero-or-more regular expression wildcards
// to make it convenient to check if the URI starts with a given pattern
// such as "library/*". This is only done when not root.
@ -132,7 +135,7 @@ public static function is($pattern)
$pattern = '^/$';
}
return preg_match('#'.$pattern.'#', static::current());
return preg_match('#'.$pattern.'#', $uri);
}
/**