From b95218295db1283b18e8d4fa82c3ad39261efaa2 Mon Sep 17 00:00:00 2001 From: Etienne Roudeix Date: Fri, 6 Sep 2013 08:59:06 +0200 Subject: [PATCH] rewriting router --- .../Controller/Front/DefaultController.php | 20 +++++++++---------- .../Thelia/Core/Routing/RewritingRouter.php | 7 ++++--- .../Template/Smarty/Plugins/UrlGenerator.php | 2 +- .../Thelia/Rewriting/RewritingResolver.php | 2 ++ .../Thelia/Rewriting/RewritingRetriever.php | 2 ++ core/lib/Thelia/Tools/URL.php | 8 ++++---- 6 files changed, 23 insertions(+), 18 deletions(-) diff --git a/core/lib/Thelia/Controller/Front/DefaultController.php b/core/lib/Thelia/Controller/Front/DefaultController.php index 58501ebb0..fe7e1aede 100755 --- a/core/lib/Thelia/Controller/Front/DefaultController.php +++ b/core/lib/Thelia/Controller/Front/DefaultController.php @@ -46,16 +46,6 @@ class DefaultController extends BaseFrontController */ public function noAction(Request $request) { - if(ConfigQuery::isRewritingEnable()) { - - /* Does the query GET parameters match a rewritten URL ? */ - $rewrittenUrl = URL::getInstance()->retrieveCurrent($request); - if($rewrittenUrl->rewrittenUrl !== null) { - /* 301 redirection to rewritten URL */ - $this->redirect($rewrittenUrl->rewrittenUrl, 301); - } - } - $view = null; if (! $view = $request->query->get('view')) { @@ -71,5 +61,15 @@ class DefaultController extends BaseFrontController $request->attributes->set("_view", "index"); } + if(ConfigQuery::isRewritingEnable()) { + if($request->attributes->get('_rewritten', false) === false) { + /* Does the query GET parameters match a rewritten URL ? */ + $rewrittenUrl = URL::getInstance()->retrieveCurrent($request); + if($rewrittenUrl->rewrittenUrl !== null) { + /* 301 redirection to rewritten URL */ + $this->redirect($rewrittenUrl->rewrittenUrl, 301); + } + } + } } } diff --git a/core/lib/Thelia/Core/Routing/RewritingRouter.php b/core/lib/Thelia/Core/Routing/RewritingRouter.php index 570372f60..79d5dc80b 100644 --- a/core/lib/Thelia/Core/Routing/RewritingRouter.php +++ b/core/lib/Thelia/Core/Routing/RewritingRouter.php @@ -43,6 +43,7 @@ use Thelia\Tools\URL; * Class RewritingRouter * @package Thelia\Core\Routing * @author Manuel Raynaud + * @author Etienne Roudeix */ class RewritingRouter implements RouterInterface, RequestMatcherInterface { @@ -170,7 +171,6 @@ class RewritingRouter implements RouterInterface, RequestMatcherInterface if(ConfigQuery::isRewritingEnable()) { try { $rewrittenUrlData = URL::getInstance()->resolve($request->getPathInfo()); - var_dump($rewrittenUrlData); exit; } catch(UrlRewritingException $e) { switch($e->getCode()) { case UrlRewritingException::URL_NOT_FOUND : @@ -205,13 +205,14 @@ class RewritingRouter implements RouterInterface, RequestMatcherInterface return array ( '_controller' => 'Thelia\\Controller\\Front\\DefaultController::noAction', - '_route' => 'rewrite' + '_route' => 'rewrite', + '_rewritten' => true, ); } throw new ResourceNotFoundException(); } - protected function redirect($url, $code = 302) + protected function redirect($url, $status = 302) { Redirect::exec($url, $status); } diff --git a/core/lib/Thelia/Core/Template/Smarty/Plugins/UrlGenerator.php b/core/lib/Thelia/Core/Template/Smarty/Plugins/UrlGenerator.php index 72b3b88fb..f6c20ecfb 100755 --- a/core/lib/Thelia/Core/Template/Smarty/Plugins/UrlGenerator.php +++ b/core/lib/Thelia/Core/Template/Smarty/Plugins/UrlGenerator.php @@ -169,7 +169,7 @@ class UrlGenerator extends AbstractSmartyPlugin protected function getCurrentUrl() { - return URL::getInstance()->retrieveCurrent()->toString(); + return URL::getInstance()->retrieveCurrent($this->request)->toString(); } protected function getReturnToUrl() diff --git a/core/lib/Thelia/Rewriting/RewritingResolver.php b/core/lib/Thelia/Rewriting/RewritingResolver.php index 900442db9..4c8bcba40 100755 --- a/core/lib/Thelia/Rewriting/RewritingResolver.php +++ b/core/lib/Thelia/Rewriting/RewritingResolver.php @@ -58,6 +58,8 @@ class RewritingResolver public function load($rewrittenUrl) { + $rewrittenUrl = ltrim($rewrittenUrl, '/'); + $this->search = $this->rewritingUrlQuery->getResolverSearch($rewrittenUrl); if($this->search->count() == 0) { diff --git a/core/lib/Thelia/Rewriting/RewritingRetriever.php b/core/lib/Thelia/Rewriting/RewritingRetriever.php index dfbe63517..8289942f2 100755 --- a/core/lib/Thelia/Rewriting/RewritingRetriever.php +++ b/core/lib/Thelia/Rewriting/RewritingRetriever.php @@ -66,6 +66,7 @@ class RewritingRetriever $allParametersWithoutView[$view . '_id'] = $viewId; } + $this->rewrittenUrl = null; $this->url = URL::getInstance()->viewUrl($view, $allParametersWithoutView); if($this->search !== null) { $this->rewrittenUrl = $this->search->getUrl(); @@ -93,6 +94,7 @@ class RewritingRetriever $allParametersWithoutView[$view . '_id'] = $viewId; } + $this->rewrittenUrl = null; $this->url = URL::getInstance()->viewUrl($view, $allParametersWithoutView); if($this->search !== null) { $this->rewrittenUrl = $this->search->getUrl(); diff --git a/core/lib/Thelia/Tools/URL.php b/core/lib/Thelia/Tools/URL.php index 152f82895..161175bbf 100755 --- a/core/lib/Thelia/Tools/URL.php +++ b/core/lib/Thelia/Tools/URL.php @@ -204,20 +204,20 @@ class URL public function retrieveCurrent(Request $request) { if(ConfigQuery::isRewritingEnable()) { - $view = $request->query->get('view', null); + $view = $request->attributes->get('_view', null); $viewLocale = $request->query->get('locale', null); $viewId = $view === null ? null : $request->query->get($view . '_id', null); $allOtherParameters = $request->query->all(); if($view !== null) { unset($allOtherParameters['view']); + if($viewId !== null) { + unset($allOtherParameters[$view . '_id']); + } } if($viewLocale !== null) { unset($allOtherParameters['locale']); } - if($viewId !== null) { - unset($allOtherParameters[$view . '_id']); - } $this->retriever->loadSpecificUrl($view, $viewLocale, $viewId, $allOtherParameters); }