début de la mise en place du parser
This commit is contained in:
@@ -6,6 +6,8 @@ use Thelia\Controller\NullControllerInterface;
|
|||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
*
|
||||||
|
* Must be the last controller call. It fixes default values
|
||||||
*
|
*
|
||||||
* @author Manuel Raynaud <mraynadu@openstudio.fr>
|
* @author Manuel Raynaud <mraynadu@openstudio.fr>
|
||||||
*/
|
*/
|
||||||
|
|||||||
30
core/lib/Thelia/Core/EventListener/RequestListener.php
Normal file
30
core/lib/Thelia/Core/EventListener/RequestListener.php
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Thelia\Core\EventListener;
|
||||||
|
|
||||||
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
|
use Symfony\Component\HttpKernel\KernelEvents;
|
||||||
|
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||||
|
|
||||||
|
class RequestListener implements EventSubscriberInterface {
|
||||||
|
|
||||||
|
protected $container;
|
||||||
|
|
||||||
|
public function __construct(ContainerInterface $container) {
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onKernelRequest(GetResponseEvent $event){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static function getSubscribedEvents(){
|
||||||
|
return array(
|
||||||
|
KernelEvents::REQUEST => array('onKernelRequest', 30)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Thelia\Core\EventSubscriber;
|
namespace Thelia\Core\EventListener;
|
||||||
|
|
||||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
use Symfony\Component\HttpKernel\KernelEvents;
|
use Symfony\Component\HttpKernel\KernelEvents;
|
||||||
@@ -12,12 +12,14 @@ use Thelia\Core\Template\ParserInterface;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
* ViewSubscriber Main class subscribing to view http response.
|
||||||
*
|
*
|
||||||
|
* @TODO Look if it's possible to block this definition in dependency-injection
|
||||||
*
|
*
|
||||||
* @author Manuel Raynaud <mraynaud@openstudio.fr>
|
* @author Manuel Raynaud <mraynaud@openstudio.fr>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class ViewSubscriber implements EventSubscriberInterface{
|
class ViewListener implements EventSubscriberInterface{
|
||||||
|
|
||||||
private $parser;
|
private $parser;
|
||||||
|
|
||||||
@@ -31,18 +33,21 @@ class ViewSubscriber implements EventSubscriberInterface{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
* Launch the parser defined on the constructor and get the result.
|
||||||
*
|
*
|
||||||
|
* The result is transform id needed into a Response object
|
||||||
*
|
*
|
||||||
* @param \Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent $event
|
* @param \Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent $event
|
||||||
*/
|
*/
|
||||||
public function onKernelView(GetResponseForControllerResultEvent $event){
|
public function onKernelView(GetResponseForControllerResultEvent $event){
|
||||||
|
|
||||||
$content = $this->parser->getContent();
|
$content = $this->parser->getContent();
|
||||||
|
|
||||||
if($content instanceof Response){
|
if($content instanceof Response){
|
||||||
$event->setResponse($content);
|
$event->setResponse($content);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$event->setResponse(new Response($content, $this->parser->getStatus()));
|
$event->setResponse(new Response($content, $this->parser->getStatus() ?: 200));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6,6 +6,7 @@ use Symfony\Component\HttpFoundation\Request;
|
|||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Thelia\Core\Template\ParserInterface;
|
use Thelia\Core\Template\ParserInterface;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\EventDispatcher\EventDispatcher;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -20,10 +21,16 @@ use Symfony\Component\DependencyInjection\ContainerBuilder;
|
|||||||
|
|
||||||
class Parser implements ParserInterface {
|
class Parser implements ParserInterface {
|
||||||
|
|
||||||
|
const PREFIXE = 'prx';
|
||||||
|
|
||||||
|
const SHOW_TIME = true;
|
||||||
|
const ALLOW_DEBUG = true;
|
||||||
|
const USE_CACHE = true;
|
||||||
|
|
||||||
protected $container;
|
protected $container;
|
||||||
|
|
||||||
protected $content;
|
protected $content;
|
||||||
protected $status;
|
protected $status = 200;
|
||||||
|
|
||||||
public function __construct(ContainerBuilder $container) {
|
public function __construct(ContainerBuilder $container) {
|
||||||
$this->container = $container;
|
$this->container = $container;
|
||||||
@@ -36,18 +43,34 @@ class Parser implements ParserInterface {
|
|||||||
*/
|
*/
|
||||||
public function getContent() {
|
public function getContent() {
|
||||||
$this->loadParser();
|
$this->loadParser();
|
||||||
|
$this->content = "toto";
|
||||||
return $this->content;
|
return $this->content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* set $content with the body of the response or the Response object directly
|
||||||
|
*
|
||||||
|
* @param string|Symfony\Component\HttpFoundation\Response $content
|
||||||
|
*/
|
||||||
public function setContent($content) {
|
public function setContent($content) {
|
||||||
$this->content = $content;
|
$this->content = $content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return type the status of the response
|
||||||
|
*/
|
||||||
public function getStatus() {
|
public function getStatus() {
|
||||||
return 200;
|
return $this->status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* status HTTP of the response
|
||||||
|
*
|
||||||
|
* @param int $status
|
||||||
|
*/
|
||||||
public function setStatus($status) {
|
public function setStatus($status) {
|
||||||
$this->status = $status;
|
$this->status = $status;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,24 +47,43 @@ class TheliaBundle extends Bundle {
|
|||||||
$container->register('resolver', 'Symfony\Component\HttpKernel\Controller\ControllerResolver');
|
$container->register('resolver', 'Symfony\Component\HttpKernel\Controller\ControllerResolver');
|
||||||
|
|
||||||
$container->register('parser','Thelia\Core\Template\Parser')
|
$container->register('parser','Thelia\Core\Template\Parser')
|
||||||
->addArgument(new Reference('service_container'));
|
->addArgument(new Reference('service_container'))
|
||||||
|
;
|
||||||
/**
|
/**
|
||||||
* RouterListener implements EventSubscriberInterface and listen for kernel.request event
|
* RouterListener implements EventSubscriberInterface and listen for kernel.request event
|
||||||
*/
|
*/
|
||||||
$container->register('listener.router', 'Symfony\Component\HttpKernel\EventListener\RouterListener')
|
$container->register('listener.router', 'Symfony\Component\HttpKernel\EventListener\RouterListener')
|
||||||
->setArguments(array(new Reference('matcher')));
|
->setArguments(array(new Reference('matcher')))
|
||||||
|
;
|
||||||
|
|
||||||
$container->register('listener.view','Thelia\Core\EventSubscriber\ViewSubscriber')
|
/**
|
||||||
->addArgument(new Reference('parser'));
|
* @TODO add an other listener on kernel.request for checking some params Like check if User is log in, set the language and other.
|
||||||
|
*
|
||||||
|
* $container->register()
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* $container->register('listener.request', 'Thelia\Core\EventListener\RequestListener')
|
||||||
|
* ->addArgument(new Reference('');
|
||||||
|
* ;
|
||||||
|
*/
|
||||||
|
|
||||||
|
$container->register('thelia.listener.view','Thelia\Core\EventListener\ViewListener')
|
||||||
|
->addArgument(new Reference('parser'))
|
||||||
|
;
|
||||||
|
|
||||||
$container->register('http_kernel','Symfony\Component\HttpKernel\HttpKernel')
|
$container->register('http_kernel','Symfony\Component\HttpKernel\HttpKernel')
|
||||||
->addArgument(new Reference('dispatcher'))
|
->addArgument(new Reference('dispatcher'))
|
||||||
->addArgument(new Reference('resolver'));
|
->addArgument(new Reference('resolver'))
|
||||||
|
;
|
||||||
|
|
||||||
$container->register('dispatcher','Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher')
|
$container->register('dispatcher','Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher')
|
||||||
->addArgument(new Reference('service_container'))
|
->addArgument(new Reference('service_container'))
|
||||||
->addMethodCall('addSubscriber', array(new Reference('listener.router')))
|
->addMethodCall('addSubscriber', array(new Reference('listener.router')))
|
||||||
->addMethodCall('addSubscriber', array(new Reference('listener.view')));
|
->addMethodCall('addSubscriber', array(new Reference('thelia.listener.view')))
|
||||||
|
;
|
||||||
|
|
||||||
|
// DEFINE DEFAULT PARAMETER LIKE
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -151,9 +151,5 @@ class TheliaMatcherCollection implements RequestMatcherInterface, RequestContext
|
|||||||
public function getContext(){
|
public function getContext(){
|
||||||
return $this->context;
|
return $this->context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
Reference in New Issue
Block a user