mirror of
https://gitlab.com/TheGamecraft/c-cms.git
synced 2026-04-23 19:39:10 -04:00
ALPHA 3.0.2
This commit is contained in:
@@ -376,10 +376,10 @@ EOF;
|
||||
if ($hostRegex) {
|
||||
preg_match('#^.\^(.*)\$.[a-zA-Z]*$#', $hostRegex, $rx);
|
||||
$state->vars = array();
|
||||
$hostRegex = '(?i:'.preg_replace_callback('#\?P<([^>]++)>#', $state->getVars, $rx[1]).')';
|
||||
$hostRegex = '(?i:'.preg_replace_callback('#\?P<([^>]++)>#', $state->getVars, $rx[1]).')\.';
|
||||
$state->hostVars = $state->vars;
|
||||
} else {
|
||||
$hostRegex = '[^/]*+';
|
||||
$hostRegex = '(?:(?:[^.]*+\.)++)';
|
||||
$state->hostVars = array();
|
||||
}
|
||||
$state->mark += strlen($rx = ($prev ? ')' : '')."|{$hostRegex}(?");
|
||||
@@ -406,6 +406,7 @@ EOF;
|
||||
$rx = ")$}{$modifiers}";
|
||||
$code .= "\n .'{$rx}',";
|
||||
$state->regex .= $rx;
|
||||
$state->markTail = 0;
|
||||
|
||||
// if the regex is too large, throw a signaling exception to recompute with smaller chunk size
|
||||
set_error_handler(function ($type, $message) { throw 0 === strpos($message, $this->signalingException->getMessage()) ? $this->signalingException : new \ErrorException($message); });
|
||||
@@ -427,7 +428,7 @@ EOF;
|
||||
EOF;
|
||||
}
|
||||
|
||||
$matchedPathinfo = $matchHost ? '$host.$pathinfo' : '$pathinfo';
|
||||
$matchedPathinfo = $matchHost ? '$host.\'.\'.$pathinfo' : '$pathinfo';
|
||||
unset($state->getVars);
|
||||
|
||||
return <<<EOF
|
||||
|
||||
@@ -63,11 +63,9 @@ class StaticPrefixCollection
|
||||
*
|
||||
* @param array|self $route
|
||||
*/
|
||||
public function addRoute(string $prefix, $route, string $staticPrefix = null)
|
||||
public function addRoute(string $prefix, $route)
|
||||
{
|
||||
if (null === $staticPrefix) {
|
||||
list($prefix, $staticPrefix) = $this->getCommonPrefix($prefix, $prefix);
|
||||
}
|
||||
list($prefix, $staticPrefix) = $this->getCommonPrefix($prefix, $prefix);
|
||||
|
||||
for ($i = \count($this->items) - 1; 0 <= $i; --$i) {
|
||||
$item = $this->items[$i];
|
||||
@@ -102,7 +100,7 @@ class StaticPrefixCollection
|
||||
|
||||
if ($item instanceof self && $this->prefixes[$i] === $commonPrefix) {
|
||||
// the new route is a child of a previous one, let's nest it
|
||||
$item->addRoute($prefix, $route, $staticPrefix);
|
||||
$item->addRoute($prefix, $route);
|
||||
} else {
|
||||
// the new route and a previous one have a common prefix, let's merge them
|
||||
$child = new self($commonPrefix);
|
||||
@@ -187,6 +185,12 @@ class StaticPrefixCollection
|
||||
}
|
||||
}
|
||||
restore_error_handler();
|
||||
if ($i < $end && 0b10 === (\ord($prefix[$i]) >> 6) && preg_match('//u', $prefix.' '.$anotherPrefix)) {
|
||||
do {
|
||||
// Prevent cutting in the middle of an UTF-8 characters
|
||||
--$i;
|
||||
} while (0b10 === (\ord($prefix[$i]) >> 6));
|
||||
}
|
||||
|
||||
return array(substr($prefix, 0, $i), substr($prefix, 0, $staticLength ?? $i));
|
||||
}
|
||||
|
||||
2
vendor/symfony/routing/RouteCompiler.php
vendored
2
vendor/symfony/routing/RouteCompiler.php
vendored
@@ -321,7 +321,7 @@ class RouteCompiler implements RouteCompilerInterface
|
||||
continue;
|
||||
}
|
||||
$regexp = substr_replace($regexp, '?:', $i, 0);
|
||||
$i += 2;
|
||||
++$i;
|
||||
}
|
||||
|
||||
return $regexp;
|
||||
|
||||
@@ -79,50 +79,50 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$matchedPathinfo = $host.$pathinfo;
|
||||
$matchedPathinfo = $host.'.'.$pathinfo;
|
||||
$regexList = array(
|
||||
0 => '{^(?'
|
||||
.'|[^/]*+(?'
|
||||
.'|/foo/(baz|symfony)(*:34)'
|
||||
.'|(?:(?:[^.]*+\\.)++)(?'
|
||||
.'|/foo/(baz|symfony)(*:46)'
|
||||
.'|/bar(?'
|
||||
.'|/([^/]++)(*:57)'
|
||||
.'|head/([^/]++)(*:77)'
|
||||
.'|/([^/]++)(*:69)'
|
||||
.'|head/([^/]++)(*:89)'
|
||||
.')'
|
||||
.'|/test/([^/]++)/(?'
|
||||
.'|(*:103)'
|
||||
.'|(*:115)'
|
||||
.')'
|
||||
.'|/([\']+)(*:119)'
|
||||
.'|/([\']+)(*:131)'
|
||||
.'|/a/(?'
|
||||
.'|b\'b/([^/]++)(?'
|
||||
.'|(*:148)'
|
||||
.'|(*:156)'
|
||||
.'|(*:160)'
|
||||
.'|(*:168)'
|
||||
.')'
|
||||
.'|(.*)(*:169)'
|
||||
.'|(.*)(*:181)'
|
||||
.'|b\'b/([^/]++)(?'
|
||||
.'|(*:192)'
|
||||
.'|(*:200)'
|
||||
.'|(*:204)'
|
||||
.'|(*:212)'
|
||||
.')'
|
||||
.')'
|
||||
.'|/multi/hello(?:/([^/]++))?(*:236)'
|
||||
.'|/multi/hello(?:/([^/]++))?(*:248)'
|
||||
.'|/([^/]++)/b/([^/]++)(?'
|
||||
.'|(*:267)'
|
||||
.'|(*:275)'
|
||||
.'|(*:279)'
|
||||
.'|(*:287)'
|
||||
.')'
|
||||
.'|/aba/([^/]++)(*:297)'
|
||||
.')|(?i:([^\\.]++)\\.example\\.com)(?'
|
||||
.'|/aba/([^/]++)(*:309)'
|
||||
.')|(?i:([^\\.]++)\\.example\\.com)\\.(?'
|
||||
.'|/route1(?'
|
||||
.'|3/([^/]++)(*:357)'
|
||||
.'|4/([^/]++)(*:375)'
|
||||
.'|3/([^/]++)(*:371)'
|
||||
.'|4/([^/]++)(*:389)'
|
||||
.')'
|
||||
.')|(?i:c\\.example\\.com)(?'
|
||||
.'|/route15/([^/]++)(*:425)'
|
||||
.')|[^/]*+(?'
|
||||
.'|/route16/([^/]++)(*:460)'
|
||||
.')|(?i:c\\.example\\.com)\\.(?'
|
||||
.'|/route15/([^/]++)(*:441)'
|
||||
.')|(?:(?:[^.]*+\\.)++)(?'
|
||||
.'|/route16/([^/]++)(*:488)'
|
||||
.'|/a/(?'
|
||||
.'|a\\.\\.\\.(*:481)'
|
||||
.'|a\\.\\.\\.(*:509)'
|
||||
.'|b/(?'
|
||||
.'|([^/]++)(*:502)'
|
||||
.'|c/([^/]++)(*:520)'
|
||||
.'|([^/]++)(*:530)'
|
||||
.'|c/([^/]++)(*:548)'
|
||||
.')'
|
||||
.')'
|
||||
.')'
|
||||
@@ -132,7 +132,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
||||
foreach ($regexList as $offset => $regex) {
|
||||
while (preg_match($regex, $matchedPathinfo, $matches)) {
|
||||
switch ($m = (int) $matches['MARK']) {
|
||||
case 103:
|
||||
case 115:
|
||||
$matches = array('foo' => $matches[1] ?? null);
|
||||
|
||||
// baz4
|
||||
@@ -159,7 +159,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
||||
not_bazbaz6:
|
||||
|
||||
break;
|
||||
case 148:
|
||||
case 160:
|
||||
$matches = array('foo' => $matches[1] ?? null);
|
||||
|
||||
// foo1
|
||||
@@ -173,14 +173,14 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
||||
not_foo1:
|
||||
|
||||
break;
|
||||
case 192:
|
||||
case 204:
|
||||
$matches = array('foo1' => $matches[1] ?? null);
|
||||
|
||||
// foo2
|
||||
return $this->mergeDefaults(array('_route' => 'foo2') + $matches, array());
|
||||
|
||||
break;
|
||||
case 267:
|
||||
case 279:
|
||||
$matches = array('_locale' => $matches[1] ?? null, 'foo' => $matches[2] ?? null);
|
||||
|
||||
// foo3
|
||||
@@ -189,23 +189,23 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
||||
break;
|
||||
default:
|
||||
$routes = array(
|
||||
34 => array(array('_route' => 'foo', 'def' => 'test'), array('bar'), null, null),
|
||||
57 => array(array('_route' => 'bar'), array('foo'), array('GET' => 0, 'HEAD' => 1), null),
|
||||
77 => array(array('_route' => 'barhead'), array('foo'), array('GET' => 0), null),
|
||||
119 => array(array('_route' => 'quoter'), array('quoter'), null, null),
|
||||
156 => array(array('_route' => 'bar1'), array('bar'), null, null),
|
||||
169 => array(array('_route' => 'overridden'), array('var'), null, null),
|
||||
200 => array(array('_route' => 'bar2'), array('bar1'), null, null),
|
||||
236 => array(array('_route' => 'helloWorld', 'who' => 'World!'), array('who'), null, null),
|
||||
275 => array(array('_route' => 'bar3'), array('_locale', 'bar'), null, null),
|
||||
297 => array(array('_route' => 'foo4'), array('foo'), null, null),
|
||||
357 => array(array('_route' => 'route13'), array('var1', 'name'), null, null),
|
||||
375 => array(array('_route' => 'route14', 'var1' => 'val'), array('var1', 'name'), null, null),
|
||||
425 => array(array('_route' => 'route15'), array('name'), null, null),
|
||||
460 => array(array('_route' => 'route16', 'var1' => 'val'), array('name'), null, null),
|
||||
481 => array(array('_route' => 'a'), array(), null, null),
|
||||
502 => array(array('_route' => 'b'), array('var'), null, null),
|
||||
520 => array(array('_route' => 'c'), array('var'), null, null),
|
||||
46 => array(array('_route' => 'foo', 'def' => 'test'), array('bar'), null, null),
|
||||
69 => array(array('_route' => 'bar'), array('foo'), array('GET' => 0, 'HEAD' => 1), null),
|
||||
89 => array(array('_route' => 'barhead'), array('foo'), array('GET' => 0), null),
|
||||
131 => array(array('_route' => 'quoter'), array('quoter'), null, null),
|
||||
168 => array(array('_route' => 'bar1'), array('bar'), null, null),
|
||||
181 => array(array('_route' => 'overridden'), array('var'), null, null),
|
||||
212 => array(array('_route' => 'bar2'), array('bar1'), null, null),
|
||||
248 => array(array('_route' => 'helloWorld', 'who' => 'World!'), array('who'), null, null),
|
||||
287 => array(array('_route' => 'bar3'), array('_locale', 'bar'), null, null),
|
||||
309 => array(array('_route' => 'foo4'), array('foo'), null, null),
|
||||
371 => array(array('_route' => 'route13'), array('var1', 'name'), null, null),
|
||||
389 => array(array('_route' => 'route14', 'var1' => 'val'), array('var1', 'name'), null, null),
|
||||
441 => array(array('_route' => 'route15'), array('name'), null, null),
|
||||
488 => array(array('_route' => 'route16', 'var1' => 'val'), array('name'), null, null),
|
||||
509 => array(array('_route' => 'a'), array(), null, null),
|
||||
530 => array(array('_route' => 'b'), array('var'), null, null),
|
||||
548 => array(array('_route' => 'c'), array('var'), null, null),
|
||||
);
|
||||
|
||||
list($ret, $vars, $requiredMethods, $requiredSchemes) = $routes[$m];
|
||||
@@ -231,7 +231,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
||||
return $ret;
|
||||
}
|
||||
|
||||
if (520 === $m) {
|
||||
if (548 === $m) {
|
||||
break;
|
||||
}
|
||||
$regex = substr_replace($regex, 'F', $m - $offset, 1 + strlen($m));
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -27,12 +27,12 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
||||
$canonicalMethod = 'GET';
|
||||
}
|
||||
|
||||
$matchedPathinfo = $host.$pathinfo;
|
||||
$matchedPathinfo = $host.'.'.$pathinfo;
|
||||
$regexList = array(
|
||||
0 => '{^(?'
|
||||
.'|(?i:([^\\.]++)\\.exampple\\.com)(?'
|
||||
.'|(?i:([^\\.]++)\\.exampple\\.com)\\.(?'
|
||||
.'|/abc([^/]++)(?'
|
||||
.'|(*:54)'
|
||||
.'|(*:56)'
|
||||
.')'
|
||||
.')'
|
||||
.')$}sD',
|
||||
@@ -41,7 +41,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
||||
foreach ($regexList as $offset => $regex) {
|
||||
while (preg_match($regex, $matchedPathinfo, $matches)) {
|
||||
switch ($m = (int) $matches['MARK']) {
|
||||
case 54:
|
||||
case 56:
|
||||
$matches = array('foo' => $matches[1] ?? null, 'foo' => $matches[2] ?? null);
|
||||
|
||||
// r1
|
||||
@@ -53,7 +53,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
||||
break;
|
||||
}
|
||||
|
||||
if (54 === $m) {
|
||||
if (56 === $m) {
|
||||
break;
|
||||
}
|
||||
$regex = substr_replace($regex, 'F', $m - $offset, 1 + strlen($m));
|
||||
|
||||
@@ -116,50 +116,50 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$matchedPathinfo = $host.$pathinfo;
|
||||
$matchedPathinfo = $host.'.'.$pathinfo;
|
||||
$regexList = array(
|
||||
0 => '{^(?'
|
||||
.'|[^/]*+(?'
|
||||
.'|/foo/(baz|symfony)(*:34)'
|
||||
.'|(?:(?:[^.]*+\\.)++)(?'
|
||||
.'|/foo/(baz|symfony)(*:46)'
|
||||
.'|/bar(?'
|
||||
.'|/([^/]++)(*:57)'
|
||||
.'|head/([^/]++)(*:77)'
|
||||
.'|/([^/]++)(*:69)'
|
||||
.'|head/([^/]++)(*:89)'
|
||||
.')'
|
||||
.'|/test/([^/]++)/(?'
|
||||
.'|(*:103)'
|
||||
.'|(*:115)'
|
||||
.')'
|
||||
.'|/([\']+)(*:119)'
|
||||
.'|/([\']+)(*:131)'
|
||||
.'|/a/(?'
|
||||
.'|b\'b/([^/]++)(?'
|
||||
.'|(*:148)'
|
||||
.'|(*:156)'
|
||||
.'|(*:160)'
|
||||
.'|(*:168)'
|
||||
.')'
|
||||
.'|(.*)(*:169)'
|
||||
.'|(.*)(*:181)'
|
||||
.'|b\'b/([^/]++)(?'
|
||||
.'|(*:192)'
|
||||
.'|(*:200)'
|
||||
.'|(*:204)'
|
||||
.'|(*:212)'
|
||||
.')'
|
||||
.')'
|
||||
.'|/multi/hello(?:/([^/]++))?(*:236)'
|
||||
.'|/multi/hello(?:/([^/]++))?(*:248)'
|
||||
.'|/([^/]++)/b/([^/]++)(?'
|
||||
.'|(*:267)'
|
||||
.'|(*:275)'
|
||||
.'|(*:279)'
|
||||
.'|(*:287)'
|
||||
.')'
|
||||
.'|/aba/([^/]++)(*:297)'
|
||||
.')|(?i:([^\\.]++)\\.example\\.com)(?'
|
||||
.'|/aba/([^/]++)(*:309)'
|
||||
.')|(?i:([^\\.]++)\\.example\\.com)\\.(?'
|
||||
.'|/route1(?'
|
||||
.'|3/([^/]++)(*:357)'
|
||||
.'|4/([^/]++)(*:375)'
|
||||
.'|3/([^/]++)(*:371)'
|
||||
.'|4/([^/]++)(*:389)'
|
||||
.')'
|
||||
.')|(?i:c\\.example\\.com)(?'
|
||||
.'|/route15/([^/]++)(*:425)'
|
||||
.')|[^/]*+(?'
|
||||
.'|/route16/([^/]++)(*:460)'
|
||||
.')|(?i:c\\.example\\.com)\\.(?'
|
||||
.'|/route15/([^/]++)(*:441)'
|
||||
.')|(?:(?:[^.]*+\\.)++)(?'
|
||||
.'|/route16/([^/]++)(*:488)'
|
||||
.'|/a/(?'
|
||||
.'|a\\.\\.\\.(*:481)'
|
||||
.'|a\\.\\.\\.(*:509)'
|
||||
.'|b/(?'
|
||||
.'|([^/]++)(*:502)'
|
||||
.'|c/([^/]++)(*:520)'
|
||||
.'|([^/]++)(*:530)'
|
||||
.'|c/([^/]++)(*:548)'
|
||||
.')'
|
||||
.')'
|
||||
.')'
|
||||
@@ -169,7 +169,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
||||
foreach ($regexList as $offset => $regex) {
|
||||
while (preg_match($regex, $matchedPathinfo, $matches)) {
|
||||
switch ($m = (int) $matches['MARK']) {
|
||||
case 103:
|
||||
case 115:
|
||||
$matches = array('foo' => $matches[1] ?? null);
|
||||
|
||||
// baz4
|
||||
@@ -196,7 +196,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
||||
not_bazbaz6:
|
||||
|
||||
break;
|
||||
case 148:
|
||||
case 160:
|
||||
$matches = array('foo' => $matches[1] ?? null);
|
||||
|
||||
// foo1
|
||||
@@ -210,14 +210,14 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
||||
not_foo1:
|
||||
|
||||
break;
|
||||
case 192:
|
||||
case 204:
|
||||
$matches = array('foo1' => $matches[1] ?? null);
|
||||
|
||||
// foo2
|
||||
return $this->mergeDefaults(array('_route' => 'foo2') + $matches, array());
|
||||
|
||||
break;
|
||||
case 267:
|
||||
case 279:
|
||||
$matches = array('_locale' => $matches[1] ?? null, 'foo' => $matches[2] ?? null);
|
||||
|
||||
// foo3
|
||||
@@ -226,23 +226,23 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
||||
break;
|
||||
default:
|
||||
$routes = array(
|
||||
34 => array(array('_route' => 'foo', 'def' => 'test'), array('bar'), null, null),
|
||||
57 => array(array('_route' => 'bar'), array('foo'), array('GET' => 0, 'HEAD' => 1), null),
|
||||
77 => array(array('_route' => 'barhead'), array('foo'), array('GET' => 0), null),
|
||||
119 => array(array('_route' => 'quoter'), array('quoter'), null, null),
|
||||
156 => array(array('_route' => 'bar1'), array('bar'), null, null),
|
||||
169 => array(array('_route' => 'overridden'), array('var'), null, null),
|
||||
200 => array(array('_route' => 'bar2'), array('bar1'), null, null),
|
||||
236 => array(array('_route' => 'helloWorld', 'who' => 'World!'), array('who'), null, null),
|
||||
275 => array(array('_route' => 'bar3'), array('_locale', 'bar'), null, null),
|
||||
297 => array(array('_route' => 'foo4'), array('foo'), null, null),
|
||||
357 => array(array('_route' => 'route13'), array('var1', 'name'), null, null),
|
||||
375 => array(array('_route' => 'route14', 'var1' => 'val'), array('var1', 'name'), null, null),
|
||||
425 => array(array('_route' => 'route15'), array('name'), null, null),
|
||||
460 => array(array('_route' => 'route16', 'var1' => 'val'), array('name'), null, null),
|
||||
481 => array(array('_route' => 'a'), array(), null, null),
|
||||
502 => array(array('_route' => 'b'), array('var'), null, null),
|
||||
520 => array(array('_route' => 'c'), array('var'), null, null),
|
||||
46 => array(array('_route' => 'foo', 'def' => 'test'), array('bar'), null, null),
|
||||
69 => array(array('_route' => 'bar'), array('foo'), array('GET' => 0, 'HEAD' => 1), null),
|
||||
89 => array(array('_route' => 'barhead'), array('foo'), array('GET' => 0), null),
|
||||
131 => array(array('_route' => 'quoter'), array('quoter'), null, null),
|
||||
168 => array(array('_route' => 'bar1'), array('bar'), null, null),
|
||||
181 => array(array('_route' => 'overridden'), array('var'), null, null),
|
||||
212 => array(array('_route' => 'bar2'), array('bar1'), null, null),
|
||||
248 => array(array('_route' => 'helloWorld', 'who' => 'World!'), array('who'), null, null),
|
||||
287 => array(array('_route' => 'bar3'), array('_locale', 'bar'), null, null),
|
||||
309 => array(array('_route' => 'foo4'), array('foo'), null, null),
|
||||
371 => array(array('_route' => 'route13'), array('var1', 'name'), null, null),
|
||||
389 => array(array('_route' => 'route14', 'var1' => 'val'), array('var1', 'name'), null, null),
|
||||
441 => array(array('_route' => 'route15'), array('name'), null, null),
|
||||
488 => array(array('_route' => 'route16', 'var1' => 'val'), array('name'), null, null),
|
||||
509 => array(array('_route' => 'a'), array(), null, null),
|
||||
530 => array(array('_route' => 'b'), array('var'), null, null),
|
||||
548 => array(array('_route' => 'c'), array('var'), null, null),
|
||||
);
|
||||
|
||||
list($ret, $vars, $requiredMethods, $requiredSchemes) = $routes[$m];
|
||||
@@ -268,7 +268,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\Redirec
|
||||
return $ret;
|
||||
}
|
||||
|
||||
if (520 === $m) {
|
||||
if (548 === $m) {
|
||||
break;
|
||||
}
|
||||
$regex = substr_replace($regex, 'F', $m - $offset, 1 + strlen($m));
|
||||
|
||||
@@ -32,10 +32,10 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
||||
.'|/(a)(*:11)'
|
||||
.')$}sD',
|
||||
11 => '{^(?'
|
||||
.'|/(.)(*:26)'
|
||||
.'|/(.)(*:22)'
|
||||
.')$}sDu',
|
||||
26 => '{^(?'
|
||||
.'|/(.)(*:41)'
|
||||
22 => '{^(?'
|
||||
.'|/(.)(*:33)'
|
||||
.')$}sD',
|
||||
);
|
||||
|
||||
@@ -45,8 +45,8 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
||||
default:
|
||||
$routes = array(
|
||||
11 => array(array('_route' => 'a'), array('a'), null, null),
|
||||
26 => array(array('_route' => 'b'), array('a'), null, null),
|
||||
41 => array(array('_route' => 'c'), array('a'), null, null),
|
||||
22 => array(array('_route' => 'b'), array('a'), null, null),
|
||||
33 => array(array('_route' => 'c'), array('a'), null, null),
|
||||
);
|
||||
|
||||
list($ret, $vars, $requiredMethods, $requiredSchemes) = $routes[$m];
|
||||
@@ -72,7 +72,7 @@ class ProjectUrlMatcher extends Symfony\Component\Routing\Matcher\UrlMatcher
|
||||
return $ret;
|
||||
}
|
||||
|
||||
if (41 === $m) {
|
||||
if (33 === $m) {
|
||||
break;
|
||||
}
|
||||
$regex = substr_replace($regex, 'F', $m - $offset, 1 + strlen($m));
|
||||
|
||||
@@ -245,6 +245,18 @@ class UrlMatcherTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
public function testMultipleParams()
|
||||
{
|
||||
$coll = new RouteCollection();
|
||||
$coll->add('foo1', new Route('/foo/{a}/{b}'));
|
||||
$coll->add('foo2', new Route('/foo/{a}/test/test/{b}'));
|
||||
$coll->add('foo3', new Route('/foo/{a}/{b}/{c}/{d}'));
|
||||
|
||||
$route = $this->getUrlMatcher($coll)->match('/foo/test/test/test/bar')['_route'];
|
||||
|
||||
$this->assertEquals('foo2', $route);
|
||||
}
|
||||
|
||||
public function testDefaultRequirementForOptionalVariables()
|
||||
{
|
||||
$coll = new RouteCollection();
|
||||
@@ -621,6 +633,43 @@ class UrlMatcherTest extends TestCase
|
||||
$this->assertEquals(array('_route' => 'a', 'id' => 'foo/bar'), $matcher->match('/foo/bar.html'));
|
||||
}
|
||||
|
||||
public function testHostPattern()
|
||||
{
|
||||
$coll = new RouteCollection();
|
||||
$coll->add('a', new Route('/{app}/{action}/{unused}', array(), array(), array(), '{host}'));
|
||||
|
||||
$expected = array(
|
||||
'_route' => 'a',
|
||||
'app' => 'an_app',
|
||||
'action' => 'an_action',
|
||||
'unused' => 'unused',
|
||||
'host' => 'foo',
|
||||
);
|
||||
$matcher = $this->getUrlMatcher($coll, new RequestContext('', 'GET', 'foo'));
|
||||
$this->assertEquals($expected, $matcher->match('/an_app/an_action/unused'));
|
||||
}
|
||||
|
||||
public function testUtf8Prefix()
|
||||
{
|
||||
$coll = new RouteCollection();
|
||||
$coll->add('a', new Route('/é{foo}', array(), array(), array('utf8' => true)));
|
||||
$coll->add('b', new Route('/è{bar}', array(), array(), array('utf8' => true)));
|
||||
|
||||
$matcher = $this->getUrlMatcher($coll);
|
||||
$this->assertEquals('a', $matcher->match('/éo')['_route']);
|
||||
}
|
||||
|
||||
public function testUtf8AndMethodMatching()
|
||||
{
|
||||
$coll = new RouteCollection();
|
||||
$coll->add('a', new Route('/admin/api/list/{shortClassName}/{id}.{_format}', array(), array(), array('utf8' => true), '', array(), array('PUT')));
|
||||
$coll->add('b', new Route('/admin/api/package.{_format}', array(), array(), array(), '', array(), array('POST')));
|
||||
$coll->add('c', new Route('/admin/api/package.{_format}', array('_format' => 'json'), array(), array(), '', array(), array('GET')));
|
||||
|
||||
$matcher = $this->getUrlMatcher($coll);
|
||||
$this->assertEquals('c', $matcher->match('/admin/api/package.json')['_route']);
|
||||
}
|
||||
|
||||
protected function getUrlMatcher(RouteCollection $routes, RequestContext $context = null)
|
||||
{
|
||||
return new UrlMatcher($routes, $context ?: new RequestContext());
|
||||
|
||||
@@ -398,6 +398,7 @@ class RouteCompilerTest extends TestCase
|
||||
yield array('#^/(?P<foo>(?:b))$#sD', '(?:b)');
|
||||
yield array('#^/(?P<foo>(?(b)b))$#sD', '(?(b)b)');
|
||||
yield array('#^/(?P<foo>(*F))$#sD', '(*F)');
|
||||
yield array('#^/(?P<foo>(?:(?:foo)))$#sD', '((foo))');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
1
vendor/symfony/routing/composer.json
vendored
1
vendor/symfony/routing/composer.json
vendored
@@ -25,7 +25,6 @@
|
||||
"symfony/expression-language": "~3.4|~4.0",
|
||||
"symfony/dependency-injection": "~3.4|~4.0",
|
||||
"doctrine/annotations": "~1.0",
|
||||
"doctrine/common": "~2.2",
|
||||
"psr/log": "~1.0"
|
||||
},
|
||||
"conflict": {
|
||||
|
||||
Reference in New Issue
Block a user