View source
<?php
use Symfony\Component\Routing\Exception\MethodNotAllowedException;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
use Symfony\Component\Routing\RequestContext;
class ProjectUrlMatcher extends Symfony\Component\Routing\Tests\Fixtures\RedirectableUrlMatcher {
public function __construct(RequestContext $context) {
$this->context = $context;
}
public function match($pathinfo) {
$allow = array();
$pathinfo = rawurldecode($pathinfo);
$context = $this->context;
$request = $this->request;
if (0 === strpos($pathinfo, '/foo') && preg_match('#^/foo/(?P<bar>baz|symfony)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'foo',
)), array(
'def' => 'test',
));
}
if (0 === strpos($pathinfo, '/bar')) {
if (preg_match('#^/bar/(?P<foo>[^/]++)$#s', $pathinfo, $matches)) {
if (!in_array($this->context
->getMethod(), array(
'GET',
'HEAD',
))) {
$allow = array_merge($allow, array(
'GET',
'HEAD',
));
goto not_bar;
}
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'bar',
)), array());
}
not_bar:
if (0 === strpos($pathinfo, '/barhead') && preg_match('#^/barhead/(?P<foo>[^/]++)$#s', $pathinfo, $matches)) {
if (!in_array($this->context
->getMethod(), array(
'GET',
'HEAD',
))) {
$allow = array_merge($allow, array(
'GET',
'HEAD',
));
goto not_barhead;
}
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'barhead',
)), array());
}
not_barhead:
}
if (0 === strpos($pathinfo, '/test')) {
if (0 === strpos($pathinfo, '/test/baz')) {
if ($pathinfo === '/test/baz') {
return array(
'_route' => 'baz',
);
}
if ($pathinfo === '/test/baz.html') {
return array(
'_route' => 'baz2',
);
}
if (rtrim($pathinfo, '/') === '/test/baz3') {
if (substr($pathinfo, -1) !== '/') {
return $this
->redirect($pathinfo . '/', 'baz3');
}
return array(
'_route' => 'baz3',
);
}
}
if (preg_match('#^/test/(?P<foo>[^/]++)/?$#s', $pathinfo, $matches)) {
if (substr($pathinfo, -1) !== '/') {
return $this
->redirect($pathinfo . '/', 'baz4');
}
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'baz4',
)), array());
}
if (preg_match('#^/test/(?P<foo>[^/]++)/$#s', $pathinfo, $matches)) {
if ($this->context
->getMethod() != 'POST') {
$allow[] = 'POST';
goto not_baz5;
}
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'baz5',
)), array());
}
not_baz5:
if (preg_match('#^/test/(?P<foo>[^/]++)/$#s', $pathinfo, $matches)) {
if ($this->context
->getMethod() != 'PUT') {
$allow[] = 'PUT';
goto not_bazbaz6;
}
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'baz.baz6',
)), array());
}
not_bazbaz6:
}
if ($pathinfo === '/foofoo') {
return array(
'def' => 'test',
'_route' => 'foofoo',
);
}
if (preg_match('#^/(?P<quoter>[\']+)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'quoter',
)), array());
}
if ($pathinfo === '/spa ce') {
return array(
'_route' => 'space',
);
}
if (0 === strpos($pathinfo, '/a')) {
if (0 === strpos($pathinfo, '/a/b\'b')) {
if (preg_match('#^/a/b\'b/(?P<foo>[^/]++)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'foo1',
)), array());
}
if (preg_match('#^/a/b\'b/(?P<bar>[^/]++)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'bar1',
)), array());
}
}
if (preg_match('#^/a/(?P<var>.*)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'overridden',
)), array());
}
if (0 === strpos($pathinfo, '/a/b\'b')) {
if (preg_match('#^/a/b\'b/(?P<foo1>[^/]++)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'foo2',
)), array());
}
if (preg_match('#^/a/b\'b/(?P<bar1>[^/]++)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'bar2',
)), array());
}
}
}
if (0 === strpos($pathinfo, '/multi')) {
if (0 === strpos($pathinfo, '/multi/hello') && preg_match('#^/multi/hello(?:/(?P<who>[^/]++))?$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'helloWorld',
)), array(
'who' => 'World!',
));
}
if ($pathinfo === '/multi/new') {
return array(
'_route' => 'overridden2',
);
}
if (rtrim($pathinfo, '/') === '/multi/hey') {
if (substr($pathinfo, -1) !== '/') {
return $this
->redirect($pathinfo . '/', 'hey');
}
return array(
'_route' => 'hey',
);
}
}
if (preg_match('#^/(?P<_locale>[^/]++)/b/(?P<foo>[^/]++)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'foo3',
)), array());
}
if (preg_match('#^/(?P<_locale>[^/]++)/b/(?P<bar>[^/]++)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'bar3',
)), array());
}
if (0 === strpos($pathinfo, '/aba')) {
if ($pathinfo === '/ababa') {
return array(
'_route' => 'ababa',
);
}
if (preg_match('#^/aba/(?P<foo>[^/]++)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'foo4',
)), array());
}
}
$host = $this->context
->getHost();
if (preg_match('#^a\\.example\\.com$#si', $host, $hostMatches)) {
if ($pathinfo === '/route1') {
return array(
'_route' => 'route1',
);
}
if ($pathinfo === '/c2/route2') {
return array(
'_route' => 'route2',
);
}
}
if (preg_match('#^b\\.example\\.com$#si', $host, $hostMatches)) {
if ($pathinfo === '/c2/route3') {
return array(
'_route' => 'route3',
);
}
}
if (preg_match('#^a\\.example\\.com$#si', $host, $hostMatches)) {
if ($pathinfo === '/route4') {
return array(
'_route' => 'route4',
);
}
}
if (preg_match('#^c\\.example\\.com$#si', $host, $hostMatches)) {
if ($pathinfo === '/route5') {
return array(
'_route' => 'route5',
);
}
}
if ($pathinfo === '/route6') {
return array(
'_route' => 'route6',
);
}
if (preg_match('#^(?P<var1>[^\\.]++)\\.example\\.com$#si', $host, $hostMatches)) {
if (0 === strpos($pathinfo, '/route1')) {
if ($pathinfo === '/route11') {
return $this
->mergeDefaults(array_replace($hostMatches, array(
'_route' => 'route11',
)), array());
}
if ($pathinfo === '/route12') {
return $this
->mergeDefaults(array_replace($hostMatches, array(
'_route' => 'route12',
)), array(
'var1' => 'val',
));
}
if (0 === strpos($pathinfo, '/route13') && preg_match('#^/route13/(?P<name>[^/]++)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($hostMatches, $matches, array(
'_route' => 'route13',
)), array());
}
if (0 === strpos($pathinfo, '/route14') && preg_match('#^/route14/(?P<name>[^/]++)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($hostMatches, $matches, array(
'_route' => 'route14',
)), array(
'var1' => 'val',
));
}
}
}
if (preg_match('#^c\\.example\\.com$#si', $host, $hostMatches)) {
if (0 === strpos($pathinfo, '/route15') && preg_match('#^/route15/(?P<name>[^/]++)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'route15',
)), array());
}
}
if (0 === strpos($pathinfo, '/route1')) {
if (0 === strpos($pathinfo, '/route16') && preg_match('#^/route16/(?P<name>[^/]++)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'route16',
)), array(
'var1' => 'val',
));
}
if ($pathinfo === '/route17') {
return array(
'_route' => 'route17',
);
}
}
if (0 === strpos($pathinfo, '/a')) {
if ($pathinfo === '/a/a...') {
return array(
'_route' => 'a',
);
}
if (0 === strpos($pathinfo, '/a/b')) {
if (preg_match('#^/a/b/(?P<var>[^/]++)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'b',
)), array());
}
if (0 === strpos($pathinfo, '/a/b/c') && preg_match('#^/a/b/c/(?P<var>[^/]++)$#s', $pathinfo, $matches)) {
return $this
->mergeDefaults(array_replace($matches, array(
'_route' => 'c',
)), array());
}
}
}
if ($pathinfo === '/secure') {
$requiredSchemes = array(
'https' => 0,
);
if (!isset($requiredSchemes[$this->context
->getScheme()])) {
return $this
->redirect($pathinfo, 'secure', key($requiredSchemes));
}
return array(
'_route' => 'secure',
);
}
if ($pathinfo === '/nonsecure') {
$requiredSchemes = array(
'http' => 0,
);
if (!isset($requiredSchemes[$this->context
->getScheme()])) {
return $this
->redirect($pathinfo, 'nonsecure', key($requiredSchemes));
}
return array(
'_route' => 'nonsecure',
);
}
throw 0 < count($allow) ? new MethodNotAllowedException(array_unique($allow)) : new ResourceNotFoundException();
}
}