rewriting router

This commit is contained in:
Etienne Roudeix
2013-09-06 08:59:06 +02:00
parent 41ed2dcebd
commit b95218295d
6 changed files with 23 additions and 18 deletions

View File

@@ -46,16 +46,6 @@ class DefaultController extends BaseFrontController
*/ */
public function noAction(Request $request) 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; $view = null;
if (! $view = $request->query->get('view')) { if (! $view = $request->query->get('view')) {
@@ -71,5 +61,15 @@ class DefaultController extends BaseFrontController
$request->attributes->set("_view", "index"); $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);
}
}
}
} }
} }

View File

@@ -43,6 +43,7 @@ use Thelia\Tools\URL;
* Class RewritingRouter * Class RewritingRouter
* @package Thelia\Core\Routing * @package Thelia\Core\Routing
* @author Manuel Raynaud <mraynaud@openstudio.fr> * @author Manuel Raynaud <mraynaud@openstudio.fr>
* @author Etienne Roudeix <eroudeix@openstudio.fr>
*/ */
class RewritingRouter implements RouterInterface, RequestMatcherInterface class RewritingRouter implements RouterInterface, RequestMatcherInterface
{ {
@@ -170,7 +171,6 @@ class RewritingRouter implements RouterInterface, RequestMatcherInterface
if(ConfigQuery::isRewritingEnable()) { if(ConfigQuery::isRewritingEnable()) {
try { try {
$rewrittenUrlData = URL::getInstance()->resolve($request->getPathInfo()); $rewrittenUrlData = URL::getInstance()->resolve($request->getPathInfo());
var_dump($rewrittenUrlData); exit;
} catch(UrlRewritingException $e) { } catch(UrlRewritingException $e) {
switch($e->getCode()) { switch($e->getCode()) {
case UrlRewritingException::URL_NOT_FOUND : case UrlRewritingException::URL_NOT_FOUND :
@@ -205,13 +205,14 @@ class RewritingRouter implements RouterInterface, RequestMatcherInterface
return array ( return array (
'_controller' => 'Thelia\\Controller\\Front\\DefaultController::noAction', '_controller' => 'Thelia\\Controller\\Front\\DefaultController::noAction',
'_route' => 'rewrite' '_route' => 'rewrite',
'_rewritten' => true,
); );
} }
throw new ResourceNotFoundException(); throw new ResourceNotFoundException();
} }
protected function redirect($url, $code = 302) protected function redirect($url, $status = 302)
{ {
Redirect::exec($url, $status); Redirect::exec($url, $status);
} }

View File

@@ -169,7 +169,7 @@ class UrlGenerator extends AbstractSmartyPlugin
protected function getCurrentUrl() protected function getCurrentUrl()
{ {
return URL::getInstance()->retrieveCurrent()->toString(); return URL::getInstance()->retrieveCurrent($this->request)->toString();
} }
protected function getReturnToUrl() protected function getReturnToUrl()

View File

@@ -58,6 +58,8 @@ class RewritingResolver
public function load($rewrittenUrl) public function load($rewrittenUrl)
{ {
$rewrittenUrl = ltrim($rewrittenUrl, '/');
$this->search = $this->rewritingUrlQuery->getResolverSearch($rewrittenUrl); $this->search = $this->rewritingUrlQuery->getResolverSearch($rewrittenUrl);
if($this->search->count() == 0) { if($this->search->count() == 0) {

View File

@@ -66,6 +66,7 @@ class RewritingRetriever
$allParametersWithoutView[$view . '_id'] = $viewId; $allParametersWithoutView[$view . '_id'] = $viewId;
} }
$this->rewrittenUrl = null;
$this->url = URL::getInstance()->viewUrl($view, $allParametersWithoutView); $this->url = URL::getInstance()->viewUrl($view, $allParametersWithoutView);
if($this->search !== null) { if($this->search !== null) {
$this->rewrittenUrl = $this->search->getUrl(); $this->rewrittenUrl = $this->search->getUrl();
@@ -93,6 +94,7 @@ class RewritingRetriever
$allParametersWithoutView[$view . '_id'] = $viewId; $allParametersWithoutView[$view . '_id'] = $viewId;
} }
$this->rewrittenUrl = null;
$this->url = URL::getInstance()->viewUrl($view, $allParametersWithoutView); $this->url = URL::getInstance()->viewUrl($view, $allParametersWithoutView);
if($this->search !== null) { if($this->search !== null) {
$this->rewrittenUrl = $this->search->getUrl(); $this->rewrittenUrl = $this->search->getUrl();

View File

@@ -204,20 +204,20 @@ class URL
public function retrieveCurrent(Request $request) public function retrieveCurrent(Request $request)
{ {
if(ConfigQuery::isRewritingEnable()) { if(ConfigQuery::isRewritingEnable()) {
$view = $request->query->get('view', null); $view = $request->attributes->get('_view', null);
$viewLocale = $request->query->get('locale', null); $viewLocale = $request->query->get('locale', null);
$viewId = $view === null ? null : $request->query->get($view . '_id', null); $viewId = $view === null ? null : $request->query->get($view . '_id', null);
$allOtherParameters = $request->query->all(); $allOtherParameters = $request->query->all();
if($view !== null) { if($view !== null) {
unset($allOtherParameters['view']); unset($allOtherParameters['view']);
if($viewId !== null) {
unset($allOtherParameters[$view . '_id']);
}
} }
if($viewLocale !== null) { if($viewLocale !== null) {
unset($allOtherParameters['locale']); unset($allOtherParameters['locale']);
} }
if($viewId !== null) {
unset($allOtherParameters[$view . '_id']);
}
$this->retriever->loadSpecificUrl($view, $viewLocale, $viewId, $allOtherParameters); $this->retriever->loadSpecificUrl($view, $viewLocale, $viewId, $allOtherParameters);
} }