context = $context; } public function match($pathinfo) { $allow = array(); // foo if (0 === strpos($pathinfo, '/foo') && preg_match('#^/foo/(?Pbaz|symfony)$#x', $pathinfo, $matches)) { return array_merge($this->mergeDefaults($matches, array ( 'def' => 'test',)), array('_route' => 'foo')); } // bar if (0 === strpos($pathinfo, '/bar') && preg_match('#^/bar/(?P[^/]+?)$#x', $pathinfo, $matches)) { if (!in_array($this->context->getMethod(), array('GET', 'HEAD'))) { $allow = array_merge($allow, array('GET', 'HEAD')); goto not_bar; } $matches['_route'] = 'bar'; return $matches; } not_bar: // barhead if (0 === strpos($pathinfo, '/barhead') && preg_match('#^/barhead/(?P[^/]+?)$#x', $pathinfo, $matches)) { if (!in_array($this->context->getMethod(), array('GET', 'HEAD'))) { $allow = array_merge($allow, array('GET', 'HEAD')); goto not_barhead; } $matches['_route'] = 'barhead'; return $matches; } not_barhead: // baz if ($pathinfo === '/test/baz') { return array('_route' => 'baz'); } // baz2 if ($pathinfo === '/test/baz.html') { return array('_route' => 'baz2'); } // baz3 if (rtrim($pathinfo, '/') === '/test/baz3') { if (substr($pathinfo, -1) !== '/') { return $this->redirect($pathinfo.'/', 'baz3'); } return array('_route' => 'baz3'); } // baz4 if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?P[^/]+?)/?$#x', $pathinfo, $matches)) { if (substr($pathinfo, -1) !== '/') { return $this->redirect($pathinfo.'/', 'baz4'); } $matches['_route'] = 'baz4'; return $matches; } // baz5 if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?P[^/]+?)/?$#x', $pathinfo, $matches)) { if ($this->context->getMethod() != 'POST') { $allow[] = 'POST'; goto not_baz5; } if (substr($pathinfo, -1) !== '/') { return $this->redirect($pathinfo.'/', 'baz5'); } $matches['_route'] = 'baz5'; return $matches; } not_baz5: // baz.baz6 if (0 === strpos($pathinfo, '/test') && preg_match('#^/test/(?P[^/]+?)/?$#x', $pathinfo, $matches)) { if ($this->context->getMethod() != 'PUT') { $allow[] = 'PUT'; goto not_bazbaz6; } if (substr($pathinfo, -1) !== '/') { return $this->redirect($pathinfo.'/', 'baz.baz6'); } $matches['_route'] = 'baz.baz6'; return $matches; } not_bazbaz6: // foofoo if ($pathinfo === '/foofoo') { return array ( 'def' => 'test', '_route' => 'foofoo',); } if (0 === strpos($pathinfo, '/a')) { if (0 === strpos($pathinfo, '/a/b')) { // foo if (preg_match('#^/a/b/(?P[^/]+?)$#x', $pathinfo, $matches)) { $matches['_route'] = 'foo'; return $matches; } // bar if (preg_match('#^/a/b/(?P[^/]+?)$#x', $pathinfo, $matches)) { $matches['_route'] = 'bar'; return $matches; } throw 0 < count($allow) ? new MethodNotAllowedException(array_unique($allow)) : new ResourceNotFoundException(); } // ababa if ($pathinfo === '/ababa') { return array('_route' => 'ababa'); } // foo if (preg_match('#^/aba/(?P[^/]+?)$#x', $pathinfo, $matches)) { $matches['_route'] = 'foo'; return $matches; } throw 0 < count($allow) ? new MethodNotAllowedException(array_unique($allow)) : new ResourceNotFoundException(); } // foo if (preg_match('#^/(?P<_locale>[^/]+?)/b/(?P[^/]+?)$#x', $pathinfo, $matches)) { $matches['_route'] = 'foo'; return $matches; } // bar if (preg_match('#^/(?P<_locale>[^/]+?)/b/(?P[^/]+?)$#x', $pathinfo, $matches)) { $matches['_route'] = 'bar'; return $matches; } // secure if ($pathinfo === '/secure') { if ($this->context->getScheme() !== 'https') { return $this->redirect($pathinfo, 'secure', 'https'); } return array('_route' => 'secure'); } // nonsecure if ($pathinfo === '/nonsecure') { if ($this->context->getScheme() !== 'http') { return $this->redirect($pathinfo, 'nonsecure', 'http'); } return array('_route' => 'nonsecure'); } throw 0 < count($allow) ? new MethodNotAllowedException(array_unique($allow)) : new ResourceNotFoundException(); } }