/** * @expectedException Symfony\Component\Routing\Exception\MethodNotAllowedException */ public function testNotAllowed() { // do not set a content here, or we need a valid request and so on... $route = new Route(); $route->setName('not_allowed'); $route->setController('testController'); $route->setRequirement('_method', 'GET'); $route->setPath('/notallowed'); self::$em->persist($route); self::$em->flush(); self::$router->getContext()->setMethod('POST'); self::$router->match('/notallowed'); }
/** * context must be propagated also when routers are added after context is set */ public function testContextOrder() { list($low, $high) = $this->createRouterMocks(); $low->expects($this->once())->method('setContext')->with($this->context); $high->expects($this->once())->method('setContext')->with($this->context); $this->router->setContext($this->context); $this->router->add($low, 10); $this->router->add($high, 100); $this->router->all(); $this->assertSame($this->context, $this->router->getContext()); }
/** * @throws ResourceNotFoundException If no match was found */ public function parse($url) { // we create a request with a new context in order to match $url to a route and get its properties $request = Request::create($url, "GET"); $originalContext = $this->router->getContext(); $context = clone $originalContext; $context->fromRequest($request); $this->router->setContext($context); try { $matchResult = $this->router->matchRequest($request); } catch (ResourceNotFoundException $e) { $this->router->setContext($originalContext); throw new InvalidArgumentException("No route matched '{$url}'"); } if (!$this->matchesRestRequest($matchResult)) { $this->router->setContext($originalContext); throw new InvalidArgumentException("No route matched '{$url}'"); } $this->router->setContext($originalContext); return $matchResult; }
/** * {@inheritdoc} */ public function getContext() { return $this->chainRouter->getContext(); }