/**
  * {@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'));
 }
Exemple #5
0
 /**
  * @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;
 }