rewriting router
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user