53 lines
1.5 KiB
PHP
53 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Trinity\Bundle\ContentManagerBundle\Listener;
|
|
|
|
use \Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
|
use \Trinity\Bundle\ContentManagerBundle\Page\PageManagerSelectorInterface;
|
|
use \Trinity\Bundle\ContentManagerBundle\Model\NodeQuery;
|
|
use \Trinity\Bundle\ContentManagerBundle\Model\NodePeer;
|
|
use \Trinity\Bundle\ContentManagerBundle\Page\DecoratorStrategyInterface;
|
|
use Trinity\Bundle\ContentManagerBundle\Routing\Router;
|
|
|
|
class RouterListener
|
|
{
|
|
protected $pageSelector;
|
|
|
|
protected $decoratorStrategy;
|
|
|
|
protected $router;
|
|
|
|
public function __construct(PageManagerSelectorInterface $pageSelector, DecoratorStrategyInterface $strategy, Router $router)
|
|
{
|
|
$this->pageSelector = $pageSelector;
|
|
$this->decoratorStrategy = $strategy;
|
|
$this->router = $router;
|
|
}
|
|
|
|
public function onKernelRequest(GetResponseEvent $event)
|
|
{
|
|
if (!$this->decoratorStrategy->isRequestDecorable($event->getRequest())) {
|
|
return null;
|
|
}
|
|
|
|
$request = $event->getRequest();
|
|
$nodeId = $request->get('_node');
|
|
$locale = $request->get('_locale');
|
|
|
|
if (!$nodeId) {
|
|
$route = $request->get('_route');
|
|
$node = NodeQuery::create()->findOneByRouteName($route);
|
|
} else {
|
|
$node = NodePeer::retrieveByIdAndCulture($nodeId, $locale);
|
|
}
|
|
|
|
if (!$node) {
|
|
return null;
|
|
}
|
|
|
|
$cms = $this->pageSelector->retrieve();
|
|
|
|
return $cms->setCurrentNode($node);
|
|
}
|
|
}
|