merged branch Tobion/named-variables (PR #3884)
Commits
-------
f666836
[Routing] simplified regex with named variables
Discussion
----------
[Routing] simplified regex with named variables
Test pass: yes
BC break: no
Since PHP 5.2.2 subpatterns in regex can be simplified from `?P<name>` to `?<name>` (see http://www.php.net/manual/en/regexp.reference.subpatterns.php).
This enhances readability.
This commit is contained in:
commit
bc0c7ba745
@ -56,7 +56,7 @@ class ApacheMatcherDumper extends MatcherDumper
|
|||||||
if (strlen($regex) < 2 || 0 === $regexPatternEnd) {
|
if (strlen($regex) < 2 || 0 === $regexPatternEnd) {
|
||||||
throw new \LogicException('The "%s" route regex "%s" is invalid', $name, $regex);
|
throw new \LogicException('The "%s" route regex "%s" is invalid', $name, $regex);
|
||||||
}
|
}
|
||||||
$regex = preg_replace('/\?P<.+?>/', '', substr($regex, 1, $regexPatternEnd - 1));
|
$regex = preg_replace('/\?<.+?>/', '', substr($regex, 1, $regexPatternEnd - 1));
|
||||||
$regex = '^'.self::escape(preg_quote($options['base_uri']).substr($regex, 1), ' ', '\\');
|
$regex = '^'.self::escape(preg_quote($options['base_uri']).substr($regex, 1), ' ', '\\');
|
||||||
|
|
||||||
$methods = array();
|
$methods = array();
|
||||||
|
@ -191,7 +191,7 @@ EOF;
|
|||||||
|
|
||||||
$supportsTrailingSlash = $supportsRedirections && (!$methods || in_array('HEAD', $methods));
|
$supportsTrailingSlash = $supportsRedirections && (!$methods || in_array('HEAD', $methods));
|
||||||
|
|
||||||
if (!count($compiledRoute->getVariables()) && false !== preg_match('#^(.)\^(?P<url>.*?)\$\1#', $compiledRoute->getRegex(), $m)) {
|
if (!count($compiledRoute->getVariables()) && false !== preg_match('#^(.)\^(?<url>.*?)\$\1#', $compiledRoute->getRegex(), $m)) {
|
||||||
if ($supportsTrailingSlash && substr($m['url'], -1) === '/') {
|
if ($supportsTrailingSlash && substr($m['url'], -1) === '/') {
|
||||||
$conditions[] = sprintf("rtrim(\$pathinfo, '/') === %s", var_export(rtrim(str_replace('\\', '', $m['url']), '/'), true));
|
$conditions[] = sprintf("rtrim(\$pathinfo, '/') === %s", var_export(rtrim(str_replace('\\', '', $m['url']), '/'), true));
|
||||||
$hasTrailingSlash = true;
|
$hasTrailingSlash = true;
|
||||||
|
@ -108,10 +108,10 @@ class RouteCompiler implements RouteCompilerInterface
|
|||||||
// Variable tokens
|
// Variable tokens
|
||||||
if (0 === $index && 0 === $firstOptional && 1 == count($tokens)) {
|
if (0 === $index && 0 === $firstOptional && 1 == count($tokens)) {
|
||||||
// When the only token is an optional variable token, the separator is required
|
// When the only token is an optional variable token, the separator is required
|
||||||
return sprintf('%s(?P<%s>%s)?', preg_quote($token[1], '#'), $token[3], $token[2]);
|
return sprintf('%s(?<%s>%s)?', preg_quote($token[1], '#'), $token[3], $token[2]);
|
||||||
} else {
|
} else {
|
||||||
$nbTokens = count($tokens);
|
$nbTokens = count($tokens);
|
||||||
$regexp = sprintf('%s(?P<%s>%s)', preg_quote($token[1], '#'), $token[3], $token[2]);
|
$regexp = sprintf('%s(?<%s>%s)', preg_quote($token[1], '#'), $token[3], $token[2]);
|
||||||
if ($index >= $firstOptional) {
|
if ($index >= $firstOptional) {
|
||||||
// Enclose each optional tokens in a subpattern to make it optional
|
// Enclose each optional tokens in a subpattern to make it optional
|
||||||
$regexp = "(?:$regexp";
|
$regexp = "(?:$regexp";
|
||||||
|
@ -26,12 +26,12 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
|||||||
$pathinfo = rawurldecode($pathinfo);
|
$pathinfo = rawurldecode($pathinfo);
|
||||||
|
|
||||||
// foo
|
// foo
|
||||||
if (0 === strpos($pathinfo, '/foo') && preg_match('#^/foo/(?P<bar>baz|symfony)$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/foo') && preg_match('#^/foo/(?<bar>baz|symfony)$#s', $pathinfo, $matches)) {
|
||||||
return array_merge($this->mergeDefaults($matches, array ( 'def' => 'test',)), array('_route' => 'foo'));
|
return array_merge($this->mergeDefaults($matches, array ( 'def' => 'test',)), array('_route' => 'foo'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// bar
|
// bar
|
||||||
if (0 === strpos($pathinfo, '/bar') && preg_match('#^/bar/(?P<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/bar') && preg_match('#^/bar/(?<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
if (!in_array($this->context->getMethod(), array('GET', 'HEAD'))) {
|
if (!in_array($this->context->getMethod(), array('GET', 'HEAD'))) {
|
||||||
$allow = array_merge($allow, array('GET', 'HEAD'));
|
$allow = array_merge($allow, array('GET', 'HEAD'));
|
||||||
goto not_bar;
|
goto not_bar;
|
||||||
@ -42,7 +42,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
|||||||
not_bar:
|
not_bar:
|
||||||
|
|
||||||
// barhead
|
// barhead
|
||||||
if (0 === strpos($pathinfo, '/barhead') && preg_match('#^/barhead/(?P<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/barhead') && preg_match('#^/barhead/(?<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
if (!in_array($this->context->getMethod(), array('GET', 'HEAD'))) {
|
if (!in_array($this->context->getMethod(), array('GET', 'HEAD'))) {
|
||||||
$allow = array_merge($allow, array('GET', 'HEAD'));
|
$allow = array_merge($allow, array('GET', 'HEAD'));
|
||||||
goto not_barhead;
|
goto not_barhead;
|
||||||
@ -68,13 +68,13 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
|||||||
}
|
}
|
||||||
|
|
||||||
// baz4
|
// baz4
|
||||||
if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?P<foo>[^/]+?)/$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?<foo>[^/]+?)/$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'baz4';
|
$matches['_route'] = 'baz4';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
// baz5
|
// baz5
|
||||||
if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?P<foo>[^/]+?)/$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?<foo>[^/]+?)/$#s', $pathinfo, $matches)) {
|
||||||
if ($this->context->getMethod() != 'POST') {
|
if ($this->context->getMethod() != 'POST') {
|
||||||
$allow[] = 'POST';
|
$allow[] = 'POST';
|
||||||
goto not_baz5;
|
goto not_baz5;
|
||||||
@ -85,7 +85,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
|||||||
not_baz5:
|
not_baz5:
|
||||||
|
|
||||||
// baz.baz6
|
// baz.baz6
|
||||||
if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?P<foo>[^/]+?)/$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?<foo>[^/]+?)/$#s', $pathinfo, $matches)) {
|
||||||
if ($this->context->getMethod() != 'PUT') {
|
if ($this->context->getMethod() != 'PUT') {
|
||||||
$allow[] = 'PUT';
|
$allow[] = 'PUT';
|
||||||
goto not_bazbaz6;
|
goto not_bazbaz6;
|
||||||
@ -101,7 +101,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
|||||||
}
|
}
|
||||||
|
|
||||||
// quoter
|
// quoter
|
||||||
if (preg_match('#^/(?P<quoter>[\']+)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/(?<quoter>[\']+)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'quoter';
|
$matches['_route'] = 'quoter';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
@ -114,13 +114,13 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
|||||||
if (0 === strpos($pathinfo, '/a')) {
|
if (0 === strpos($pathinfo, '/a')) {
|
||||||
if (0 === strpos($pathinfo, '/a/b\'b')) {
|
if (0 === strpos($pathinfo, '/a/b\'b')) {
|
||||||
// foo1
|
// foo1
|
||||||
if (preg_match('#^/a/b\'b/(?P<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/a/b\'b/(?<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'foo1';
|
$matches['_route'] = 'foo1';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
// bar1
|
// bar1
|
||||||
if (preg_match('#^/a/b\'b/(?P<bar>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/a/b\'b/(?<bar>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'bar1';
|
$matches['_route'] = 'bar1';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
@ -128,20 +128,20 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
|||||||
}
|
}
|
||||||
|
|
||||||
// overriden
|
// overriden
|
||||||
if (preg_match('#^/a/(?P<var>.*)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/a/(?<var>.*)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'overriden';
|
$matches['_route'] = 'overriden';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 === strpos($pathinfo, '/a/b\'b')) {
|
if (0 === strpos($pathinfo, '/a/b\'b')) {
|
||||||
// foo2
|
// foo2
|
||||||
if (preg_match('#^/a/b\'b/(?P<foo1>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/a/b\'b/(?<foo1>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'foo2';
|
$matches['_route'] = 'foo2';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
// bar2
|
// bar2
|
||||||
if (preg_match('#^/a/b\'b/(?P<bar1>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/a/b\'b/(?<bar1>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'bar2';
|
$matches['_route'] = 'bar2';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
@ -152,7 +152,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
|||||||
|
|
||||||
if (0 === strpos($pathinfo, '/multi')) {
|
if (0 === strpos($pathinfo, '/multi')) {
|
||||||
// helloWorld
|
// helloWorld
|
||||||
if (0 === strpos($pathinfo, '/multi/hello') && preg_match('#^/multi/hello(?:/(?P<who>[^/]+?))?$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/multi/hello') && preg_match('#^/multi/hello(?:/(?<who>[^/]+?))?$#s', $pathinfo, $matches)) {
|
||||||
return array_merge($this->mergeDefaults($matches, array ( 'who' => 'World!',)), array('_route' => 'helloWorld'));
|
return array_merge($this->mergeDefaults($matches, array ( 'who' => 'World!',)), array('_route' => 'helloWorld'));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,13 +169,13 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
|||||||
}
|
}
|
||||||
|
|
||||||
// foo3
|
// foo3
|
||||||
if (preg_match('#^/(?P<_locale>[^/]+?)/b/(?P<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/(?<_locale>[^/]+?)/b/(?<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'foo3';
|
$matches['_route'] = 'foo3';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
// bar3
|
// bar3
|
||||||
if (preg_match('#^/(?P<_locale>[^/]+?)/b/(?P<bar>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/(?<_locale>[^/]+?)/b/(?<bar>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'bar3';
|
$matches['_route'] = 'bar3';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
@ -186,7 +186,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
|||||||
}
|
}
|
||||||
|
|
||||||
// foo4
|
// foo4
|
||||||
if (0 === strpos($pathinfo, '/aba') && preg_match('#^/aba/(?P<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/aba') && preg_match('#^/aba/(?<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'foo4';
|
$matches['_route'] = 'foo4';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
@ -199,13 +199,13 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
|||||||
|
|
||||||
if (0 === strpos($pathinfo, '/a/b')) {
|
if (0 === strpos($pathinfo, '/a/b')) {
|
||||||
// b
|
// b
|
||||||
if (preg_match('#^/a/b/(?P<var>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/a/b/(?<var>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'b';
|
$matches['_route'] = 'b';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
// c
|
// c
|
||||||
if (0 === strpos($pathinfo, '/a/b/c') && preg_match('#^/a/b/c/(?P<var>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/a/b/c') && preg_match('#^/a/b/c/(?<var>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'c';
|
$matches['_route'] = 'c';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
@ -26,12 +26,12 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
|||||||
$pathinfo = rawurldecode($pathinfo);
|
$pathinfo = rawurldecode($pathinfo);
|
||||||
|
|
||||||
// foo
|
// foo
|
||||||
if (0 === strpos($pathinfo, '/foo') && preg_match('#^/foo/(?P<bar>baz|symfony)$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/foo') && preg_match('#^/foo/(?<bar>baz|symfony)$#s', $pathinfo, $matches)) {
|
||||||
return array_merge($this->mergeDefaults($matches, array ( 'def' => 'test',)), array('_route' => 'foo'));
|
return array_merge($this->mergeDefaults($matches, array ( 'def' => 'test',)), array('_route' => 'foo'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// bar
|
// bar
|
||||||
if (0 === strpos($pathinfo, '/bar') && preg_match('#^/bar/(?P<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/bar') && preg_match('#^/bar/(?<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
if (!in_array($this->context->getMethod(), array('GET', 'HEAD'))) {
|
if (!in_array($this->context->getMethod(), array('GET', 'HEAD'))) {
|
||||||
$allow = array_merge($allow, array('GET', 'HEAD'));
|
$allow = array_merge($allow, array('GET', 'HEAD'));
|
||||||
goto not_bar;
|
goto not_bar;
|
||||||
@ -42,7 +42,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
|||||||
not_bar:
|
not_bar:
|
||||||
|
|
||||||
// barhead
|
// barhead
|
||||||
if (0 === strpos($pathinfo, '/barhead') && preg_match('#^/barhead/(?P<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/barhead') && preg_match('#^/barhead/(?<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
if (!in_array($this->context->getMethod(), array('GET', 'HEAD'))) {
|
if (!in_array($this->context->getMethod(), array('GET', 'HEAD'))) {
|
||||||
$allow = array_merge($allow, array('GET', 'HEAD'));
|
$allow = array_merge($allow, array('GET', 'HEAD'));
|
||||||
goto not_barhead;
|
goto not_barhead;
|
||||||
@ -71,7 +71,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
|||||||
}
|
}
|
||||||
|
|
||||||
// baz4
|
// baz4
|
||||||
if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?P<foo>[^/]+?)/?$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?<foo>[^/]+?)/?$#s', $pathinfo, $matches)) {
|
||||||
if (substr($pathinfo, -1) !== '/') {
|
if (substr($pathinfo, -1) !== '/') {
|
||||||
return $this->redirect($pathinfo.'/', 'baz4');
|
return $this->redirect($pathinfo.'/', 'baz4');
|
||||||
}
|
}
|
||||||
@ -80,7 +80,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
|||||||
}
|
}
|
||||||
|
|
||||||
// baz5
|
// baz5
|
||||||
if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?P<foo>[^/]+?)/$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?<foo>[^/]+?)/$#s', $pathinfo, $matches)) {
|
||||||
if ($this->context->getMethod() != 'POST') {
|
if ($this->context->getMethod() != 'POST') {
|
||||||
$allow[] = 'POST';
|
$allow[] = 'POST';
|
||||||
goto not_baz5;
|
goto not_baz5;
|
||||||
@ -91,7 +91,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
|||||||
not_baz5:
|
not_baz5:
|
||||||
|
|
||||||
// baz.baz6
|
// baz.baz6
|
||||||
if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?P<foo>[^/]+?)/$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?<foo>[^/]+?)/$#s', $pathinfo, $matches)) {
|
||||||
if ($this->context->getMethod() != 'PUT') {
|
if ($this->context->getMethod() != 'PUT') {
|
||||||
$allow[] = 'PUT';
|
$allow[] = 'PUT';
|
||||||
goto not_bazbaz6;
|
goto not_bazbaz6;
|
||||||
@ -107,7 +107,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
|||||||
}
|
}
|
||||||
|
|
||||||
// quoter
|
// quoter
|
||||||
if (preg_match('#^/(?P<quoter>[\']+)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/(?<quoter>[\']+)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'quoter';
|
$matches['_route'] = 'quoter';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
@ -120,13 +120,13 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
|||||||
if (0 === strpos($pathinfo, '/a')) {
|
if (0 === strpos($pathinfo, '/a')) {
|
||||||
if (0 === strpos($pathinfo, '/a/b\'b')) {
|
if (0 === strpos($pathinfo, '/a/b\'b')) {
|
||||||
// foo1
|
// foo1
|
||||||
if (preg_match('#^/a/b\'b/(?P<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/a/b\'b/(?<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'foo1';
|
$matches['_route'] = 'foo1';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
// bar1
|
// bar1
|
||||||
if (preg_match('#^/a/b\'b/(?P<bar>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/a/b\'b/(?<bar>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'bar1';
|
$matches['_route'] = 'bar1';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
@ -134,20 +134,20 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
|||||||
}
|
}
|
||||||
|
|
||||||
// overriden
|
// overriden
|
||||||
if (preg_match('#^/a/(?P<var>.*)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/a/(?<var>.*)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'overriden';
|
$matches['_route'] = 'overriden';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 === strpos($pathinfo, '/a/b\'b')) {
|
if (0 === strpos($pathinfo, '/a/b\'b')) {
|
||||||
// foo2
|
// foo2
|
||||||
if (preg_match('#^/a/b\'b/(?P<foo1>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/a/b\'b/(?<foo1>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'foo2';
|
$matches['_route'] = 'foo2';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
// bar2
|
// bar2
|
||||||
if (preg_match('#^/a/b\'b/(?P<bar1>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/a/b\'b/(?<bar1>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'bar2';
|
$matches['_route'] = 'bar2';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
@ -158,7 +158,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
|||||||
|
|
||||||
if (0 === strpos($pathinfo, '/multi')) {
|
if (0 === strpos($pathinfo, '/multi')) {
|
||||||
// helloWorld
|
// helloWorld
|
||||||
if (0 === strpos($pathinfo, '/multi/hello') && preg_match('#^/multi/hello(?:/(?P<who>[^/]+?))?$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/multi/hello') && preg_match('#^/multi/hello(?:/(?<who>[^/]+?))?$#s', $pathinfo, $matches)) {
|
||||||
return array_merge($this->mergeDefaults($matches, array ( 'who' => 'World!',)), array('_route' => 'helloWorld'));
|
return array_merge($this->mergeDefaults($matches, array ( 'who' => 'World!',)), array('_route' => 'helloWorld'));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,13 +178,13 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
|||||||
}
|
}
|
||||||
|
|
||||||
// foo3
|
// foo3
|
||||||
if (preg_match('#^/(?P<_locale>[^/]+?)/b/(?P<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/(?<_locale>[^/]+?)/b/(?<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'foo3';
|
$matches['_route'] = 'foo3';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
// bar3
|
// bar3
|
||||||
if (preg_match('#^/(?P<_locale>[^/]+?)/b/(?P<bar>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/(?<_locale>[^/]+?)/b/(?<bar>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'bar3';
|
$matches['_route'] = 'bar3';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
@ -195,7 +195,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
|||||||
}
|
}
|
||||||
|
|
||||||
// foo4
|
// foo4
|
||||||
if (0 === strpos($pathinfo, '/aba') && preg_match('#^/aba/(?P<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/aba') && preg_match('#^/aba/(?<foo>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'foo4';
|
$matches['_route'] = 'foo4';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
@ -208,13 +208,13 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
|||||||
|
|
||||||
if (0 === strpos($pathinfo, '/a/b')) {
|
if (0 === strpos($pathinfo, '/a/b')) {
|
||||||
// b
|
// b
|
||||||
if (preg_match('#^/a/b/(?P<var>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/a/b/(?<var>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'b';
|
$matches['_route'] = 'b';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
// c
|
// c
|
||||||
if (0 === strpos($pathinfo, '/a/b/c') && preg_match('#^/a/b/c/(?P<var>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (0 === strpos($pathinfo, '/a/b/c') && preg_match('#^/a/b/c/(?<var>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'c';
|
$matches['_route'] = 'c';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
|||||||
}
|
}
|
||||||
|
|
||||||
// dynamic
|
// dynamic
|
||||||
if (preg_match('#^/rootprefix/(?P<var>[^/]+?)$#s', $pathinfo, $matches)) {
|
if (preg_match('#^/rootprefix/(?<var>[^/]+?)$#s', $pathinfo, $matches)) {
|
||||||
$matches['_route'] = 'dynamic';
|
$matches['_route'] = 'dynamic';
|
||||||
return $matches;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||||||
array(
|
array(
|
||||||
'Route with a variable',
|
'Route with a variable',
|
||||||
array('/foo/{bar}'),
|
array('/foo/{bar}'),
|
||||||
'/foo', '#^/foo/(?P<bar>[^/]+?)$#s', array('bar'), array(
|
'/foo', '#^/foo/(?<bar>[^/]+?)$#s', array('bar'), array(
|
||||||
array('variable', '/', '[^/]+?', 'bar'),
|
array('variable', '/', '[^/]+?', 'bar'),
|
||||||
array('text', '/foo'),
|
array('text', '/foo'),
|
||||||
)),
|
)),
|
||||||
@ -51,7 +51,7 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||||||
array(
|
array(
|
||||||
'Route with a variable that has a default value',
|
'Route with a variable that has a default value',
|
||||||
array('/foo/{bar}', array('bar' => 'bar')),
|
array('/foo/{bar}', array('bar' => 'bar')),
|
||||||
'/foo', '#^/foo(?:/(?P<bar>[^/]+?))?$#s', array('bar'), array(
|
'/foo', '#^/foo(?:/(?<bar>[^/]+?))?$#s', array('bar'), array(
|
||||||
array('variable', '/', '[^/]+?', 'bar'),
|
array('variable', '/', '[^/]+?', 'bar'),
|
||||||
array('text', '/foo'),
|
array('text', '/foo'),
|
||||||
)),
|
)),
|
||||||
@ -59,7 +59,7 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||||||
array(
|
array(
|
||||||
'Route with several variables',
|
'Route with several variables',
|
||||||
array('/foo/{bar}/{foobar}'),
|
array('/foo/{bar}/{foobar}'),
|
||||||
'/foo', '#^/foo/(?P<bar>[^/]+?)/(?P<foobar>[^/]+?)$#s', array('bar', 'foobar'), array(
|
'/foo', '#^/foo/(?<bar>[^/]+?)/(?<foobar>[^/]+?)$#s', array('bar', 'foobar'), array(
|
||||||
array('variable', '/', '[^/]+?', 'foobar'),
|
array('variable', '/', '[^/]+?', 'foobar'),
|
||||||
array('variable', '/', '[^/]+?', 'bar'),
|
array('variable', '/', '[^/]+?', 'bar'),
|
||||||
array('text', '/foo'),
|
array('text', '/foo'),
|
||||||
@ -68,7 +68,7 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||||||
array(
|
array(
|
||||||
'Route with several variables that have default values',
|
'Route with several variables that have default values',
|
||||||
array('/foo/{bar}/{foobar}', array('bar' => 'bar', 'foobar' => '')),
|
array('/foo/{bar}/{foobar}', array('bar' => 'bar', 'foobar' => '')),
|
||||||
'/foo', '#^/foo(?:/(?P<bar>[^/]+?)(?:/(?P<foobar>[^/]+?))?)?$#s', array('bar', 'foobar'), array(
|
'/foo', '#^/foo(?:/(?<bar>[^/]+?)(?:/(?<foobar>[^/]+?))?)?$#s', array('bar', 'foobar'), array(
|
||||||
array('variable', '/', '[^/]+?', 'foobar'),
|
array('variable', '/', '[^/]+?', 'foobar'),
|
||||||
array('variable', '/', '[^/]+?', 'bar'),
|
array('variable', '/', '[^/]+?', 'bar'),
|
||||||
array('text', '/foo'),
|
array('text', '/foo'),
|
||||||
@ -77,7 +77,7 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||||||
array(
|
array(
|
||||||
'Route with several variables but some of them have no default values',
|
'Route with several variables but some of them have no default values',
|
||||||
array('/foo/{bar}/{foobar}', array('bar' => 'bar')),
|
array('/foo/{bar}/{foobar}', array('bar' => 'bar')),
|
||||||
'/foo', '#^/foo/(?P<bar>[^/]+?)/(?P<foobar>[^/]+?)$#s', array('bar', 'foobar'), array(
|
'/foo', '#^/foo/(?<bar>[^/]+?)/(?<foobar>[^/]+?)$#s', array('bar', 'foobar'), array(
|
||||||
array('variable', '/', '[^/]+?', 'foobar'),
|
array('variable', '/', '[^/]+?', 'foobar'),
|
||||||
array('variable', '/', '[^/]+?', 'bar'),
|
array('variable', '/', '[^/]+?', 'bar'),
|
||||||
array('text', '/foo'),
|
array('text', '/foo'),
|
||||||
@ -86,14 +86,14 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||||||
array(
|
array(
|
||||||
'Route with an optional variable as the first segment',
|
'Route with an optional variable as the first segment',
|
||||||
array('/{bar}', array('bar' => 'bar')),
|
array('/{bar}', array('bar' => 'bar')),
|
||||||
'', '#^/(?P<bar>[^/]+?)?$#s', array('bar'), array(
|
'', '#^/(?<bar>[^/]+?)?$#s', array('bar'), array(
|
||||||
array('variable', '/', '[^/]+?', 'bar'),
|
array('variable', '/', '[^/]+?', 'bar'),
|
||||||
)),
|
)),
|
||||||
|
|
||||||
array(
|
array(
|
||||||
'Route with an optional variable as the first segment with requirements',
|
'Route with an optional variable as the first segment with requirements',
|
||||||
array('/{bar}', array('bar' => 'bar'), array('bar' => '(foo|bar)')),
|
array('/{bar}', array('bar' => 'bar'), array('bar' => '(foo|bar)')),
|
||||||
'', '#^/(?P<bar>(foo|bar))?$#s', array('bar'), array(
|
'', '#^/(?<bar>(foo|bar))?$#s', array('bar'), array(
|
||||||
array('variable', '/', '(foo|bar)', 'bar'),
|
array('variable', '/', '(foo|bar)', 'bar'),
|
||||||
)),
|
)),
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user