deblan.tv/vendor/trinity/src/Trinity/Bundle/ContentManagerBundle/Listener/RouterListener.php
2015-03-02 21:57:49 +01:00

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);
}
}