/** * {@inheritdoc} * * @throws \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException * Thrown when access checking failed. */ public function matchRequest(Request $request) { $parameters = $this->chainRouter->matchRequest($request); $request->attributes->add($parameters); $this->checkAccess($request); // We can not return $parameters because the access check can change the // request attributes. return $request->attributes->all(); }
public function testEnhanceTemplateByClass() { if ($content = $this->getDm()->find(null, '/test/content/templatebyclass')) { $this->getDm()->remove($content); $this->getDm()->flush(); } NodeHelper::createPath($this->getDm()->getPhpcrSession(), '/test/content'); $document = new Content(); $document->setId('/test/content/templatebyclass'); $document->setTitle('the title'); $this->getDm()->persist($document); // put a route for this content $root = $this->getDm()->find(null, self::ROUTE_ROOT); $route = new Route(); $route->setContent($document); $route->setPosition($root, 'templatebyclass'); $this->getDm()->persist($route); $this->getDm()->flush(); $expected = array('_controller' => 'cmf_content.controller:indexAction', RouteObjectInterface::ROUTE_NAME => self::ROUTE_ROOT . '/templatebyclass'); $request = Request::create('/templatebyclass'); $matches = $this->router->matchRequest($request); ksort($matches); $this->assertEquals($expected, $matches); $this->assertTrue($request->attributes->has(DynamicRouter::ROUTE_KEY)); $this->assertTrue($request->attributes->has(DynamicRouter::CONTENT_TEMPLATE)); $this->assertEquals('TestBundle:Content:index.html.twig', $request->attributes->get(DynamicRouter::CONTENT_TEMPLATE)); }
public function testEnhanceTemplateByClass() { if ($content = self::$dm->find(null, '/templatebyclass')) { self::$dm->remove($content); self::$dm->flush(); } $document = new Content(); $document->path = '/templatebyclass'; self::$dm->persist($document); // put a route for this content $root = self::$dm->find(null, self::ROUTE_ROOT); $route = new Route(); $route->setRouteContent($document); $route->setPosition($root, 'templatebyclass'); self::$dm->persist($route); self::$dm->flush(); $expected = array('_controller' => 'symfony_cmf_content.controller:indexAction', RouteObjectInterface::ROUTE_NAME => '/test/routing/templatebyclass'); $request = Request::create('/templatebyclass'); $matches = self::$router->matchRequest($request); ksort($matches); $this->assertEquals($expected, $matches); $this->assertTrue($request->attributes->has(DynamicRouter::ROUTE_KEY)); $this->assertTrue($request->attributes->has(DynamicRouter::CONTENT_TEMPLATE)); $this->assertEquals('TestBundle:Content:index.html.twig', $request->attributes->get(DynamicRouter::CONTENT_TEMPLATE)); }
/** * If any of the routers throws a not allowed exception and no other matches, we need to see this * * @expectedException \Symfony\Component\Routing\Exception\MethodNotAllowedException */ public function testMatchRequestMethodNotAllowed() { $url = '/test'; list($low, $high) = $this->createRouterMocks(); $high->expects($this->once())->method('match')->with($url)->will($this->throwException(new MethodNotAllowedException(array()))); $low->expects($this->once())->method('match')->with($url)->will($this->throwException(new ResourceNotFoundException())); $this->router->add($low, 10); $this->router->add($high, 100); $this->router->matchRequest(Request::create('/test')); }
/** * @param Request $request * * @throws \Exception */ public function matchRequest(Request $request) { try { $parameters = parent::matchRequest($request); $this->matchedRouteRequest = $request; return $parameters; } catch (\Exception $e) { throw $e; } }
/** * @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; }