Use of the kernel.request event

This commit is contained in:
Julien Chanseaume
2014-08-08 10:28:45 +02:00
parent 8627de3f17
commit b4e60ba69c

View File

@@ -15,6 +15,8 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\KernelEvents;
use Thelia\Core\Translation\Translator; use Thelia\Core\Translation\Translator;
use Thelia\Model\ConfigQuery;
use Thelia\Model\LangQuery;
/** /**
* Class RequestListener * Class RequestListener
@@ -53,6 +55,43 @@ class RequestListener implements EventSubscriberInterface
); );
} }
/**
* Save the previous URL in session which is based on the referer header of the request
*
* @param GetResponseEvent $event
*/
public function registerPreviousUrl(GetResponseEvent $event)
{
$request = $event->getRequest();
// set previous URL
if (null !== $referer = $request->headers->get('referer')) {
$session = $request->getSession();
if (ConfigQuery::read("one_domain_foreach_lang", false) == 1) {
$components = parse_url($referer);
$lang = LangQuery::create()
->filterByUrl(sprintf("%s://%s", $components["scheme"], $components["host"]), ModelCriteria::LIKE)
->findOne();
if (null !== $lang) {
$session->setReturnToUrl($referer);
}
} else {
if ( false !== strpos($referer, $request->getSchemeAndHttpHost())) {
$session->setReturnToUrl($referer);
}
}
}
}
/** /**
* Returns an array of event names this subscriber wants to listen to. * Returns an array of event names this subscriber wants to listen to.
* *
@@ -76,7 +115,10 @@ class RequestListener implements EventSubscriberInterface
public static function getSubscribedEvents() public static function getSubscribedEvents()
{ {
return array( return array(
KernelEvents::REQUEST => array("registerValidatorTranslator", 128) KernelEvents::REQUEST => array(
array("registerValidatorTranslator", 128),
array("registerPreviousUrl", 128)
)
); );
} }
} }