From 849520eff9a0ba4eaf01f4fe3d5c642abe4024a7 Mon Sep 17 00:00:00 2001 From: gmorel Date: Mon, 9 Sep 2013 16:08:12 +0200 Subject: [PATCH] Working - Add Symfony2 routing ability to Thelia router --- .../Controller/Admin/BaseAdminController.php | 23 +++++++++++++-- core/lib/Thelia/Controller/BaseController.php | 29 +++++++++++++------ 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/core/lib/Thelia/Controller/Admin/BaseAdminController.php b/core/lib/Thelia/Controller/Admin/BaseAdminController.php index 298cd0182..5461b8d3f 100755 --- a/core/lib/Thelia/Controller/Admin/BaseAdminController.php +++ b/core/lib/Thelia/Controller/Admin/BaseAdminController.php @@ -22,6 +22,9 @@ /*************************************************************************************/ namespace Thelia\Controller\Admin; +use Symfony\Component\Routing\Exception\InvalidParameterException; +use Symfony\Component\Routing\Exception\MissingMandatoryParametersException; +use Symfony\Component\Routing\Exception\RouteNotFoundException; use Thelia\Controller\BaseController; use Symfony\Component\HttpFoundation\Response; use Thelia\Core\Security\Exception\AuthorizationException; @@ -211,12 +214,26 @@ class BaseAdminController extends BaseController /** * Return the route path defined for the givent route ID * - * @param string $routeId a route ID, as defines in Config/Resources/routing/admin.xml + * @param string $routeId a route ID, as defines in Config/Resources/routing/admin.xml + * @param mixed $parameters An array of parameters + * @param Boolean|string $referenceType The type of reference to be generated (one of the constants) + * + * @throws RouteNotFoundException If the named route doesn't exist + * @throws MissingMandatoryParametersException When some parameters are missing that are mandatory for the route + * @throws InvalidParameterException When a parameter value for a placeholder is not correct because + * it does not match the requirement + * @throws \InvalidArgumentException When the router doesn't exist + * @return string The generated URL * * @see \Thelia\Controller\BaseController::getRouteFromRouter() */ - protected function getRoute($routeId) { - return $this->getRouteFromRouter('router.admin', $routeId); + protected function getRoute($routeId, $parameters = array(), $referenceType = Router::ABSOLUTE_PATH) { + return $this->getRouteFromRouter( + 'router.admin', + $routeId, + $parameters, + $referenceType + ); } /** diff --git a/core/lib/Thelia/Controller/BaseController.php b/core/lib/Thelia/Controller/BaseController.php index e5b098f02..666e8ca32 100755 --- a/core/lib/Thelia/Controller/BaseController.php +++ b/core/lib/Thelia/Controller/BaseController.php @@ -25,6 +25,10 @@ namespace Thelia\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\DependencyInjection\ContainerAware; +use Symfony\Component\Routing\Exception\InvalidParameterException; +use Symfony\Component\Routing\Exception\MissingMandatoryParametersException; +use Symfony\Component\Routing\Exception\RouteNotFoundException; +use Symfony\Component\Routing\Router; use Thelia\Core\Security\SecurityContext; use Thelia\Tools\URL; use Thelia\Tools\Redirect; @@ -216,20 +220,27 @@ class BaseController extends ContainerAware /** * Get a route path from the route id. * - * @param $routerName - * @param $routeId + * @param string $routerName Router name + * @param string $routeId The name of the route + * @param mixed $parameters An array of parameters + * @param Boolean|string $referenceType The type of reference to be generated (one of the constants) * - * @return mixed - * @throws InvalidArgumentException + * @throws RouteNotFoundException If the named route doesn't exist + * @throws MissingMandatoryParametersException When some parameters are missing that are mandatory for the route + * @throws InvalidParameterException When a parameter value for a placeholder is not correct because + * it does not match the requirement + * @throws \InvalidArgumentException When the router doesn't exist + * @return string The generated URL */ - protected function getRouteFromRouter($routerName, $routeId) { - $route = $this->container->get($routerName)->getRouteCollection()->get($routeId); + protected function getRouteFromRouter($routerName, $routeId, $parameters = array(), $referenceType = Router::ABSOLUTE_PATH) { + /** @var Router $router */ + $router = $this->container->get($routerName); - if ($route == null) { - throw new \InvalidArgumentException(sprintf("Route ID '%s' does not exists.", $routeId)); + if ($router == null) { + throw new \InvalidArgumentException(sprintf("Router '%s' does not exists.", $routerName)); } - return $route->getPath(); + return $router->generate($routeId, $parameters, $referenceType); } /**