mise en place du templatind dans Thelia

This commit is contained in:
Manuel Raynaud
2012-10-18 17:54:49 +02:00
parent b603c6cf44
commit 60057f4cc9
8 changed files with 152 additions and 18 deletions

View File

@@ -2,15 +2,31 @@
namespace Thelia\Controller; namespace Thelia\Controller;
use Thelia\Controller\NullController; use Thelia\Controller\NullControllerInterface;
use Symfony\Component\HttpFoundation\Request;
/** /**
* *
* @author Manuel Raynaud <mraynadu@openstudio.fr> * @author Manuel Raynaud <mraynadu@openstudio.fr>
*/ */
class DefaultController extends NullController{ class DefaultController implements NullControllerInterface{
/**
*
* set the default value for thelia
*
* In this case there is no action so we have to verify if some needed params are not missing
*
* @param \Symfony\Component\HttpFoundation\Request $request
*/
public function noAction(Request $request) {
if($request->query->has('view') === false){
$fond = "index";
if($request->request->has('view')){
$fond = $request->request->get('view');
}
$request->query->set('view', $fond);
}
}
} }
?> ?>

View File

@@ -2,19 +2,19 @@
namespace Thelia\Controller; namespace Thelia\Controller;
use Symfony\Component\HttpFoundation\Request;
/** /**
* *
* @author Manuel Raynaud <mraynaud@openstudio.fr> * @author Manuel Raynaud <mraynaud@openstudio.fr>
*/ */
abstract class NullController { interface NullControllerInterface {
/** /**
* Nothing to do * Nothing to do
*/ */
public function noAction(){ public function noAction(Request $request);
}
} }
?> ?>

View File

@@ -0,0 +1,53 @@
<?php
namespace Thelia\Core\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\HttpFoundation\Response;
use Thelia\Core\Template\ParserInterface;
/**
*
*
*
* @author Manuel Raynaud <mraynaud@openstudio.fr>
*/
class ViewSubscriber implements EventSubscriberInterface{
private $parser;
public function __construct(ParserInterface $parser) {
$this->parser = $parser;
}
public function onKernelView(GetResponseForControllerResultEvent $event){
$content = $this->parser->getContent();
if($content instanceof Response){
$event->setResponse($content);
}
else{
$event->setResponse(new Response($this->parser->getContent(), $this->parser->getStatus()));
}
//$event->setResponse(($content = $this->parser->getContent() instanceof Response) ?: new Response($this->parser->getContent(), $this->parser->getStatus()) );
}
/**
*
* @return array The event names to listen to
*/
public static function getSubscribedEvents(){
return array(
KernelEvents::VIEW => array(array('onKernelView', 32)),
);
}
}
?>

View File

@@ -0,0 +1,36 @@
<?php
namespace Thelia\Core\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Thelia\Core\Template\ParserInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
class Parser implements ParserInterface {
protected $container;
public function __construct(ContainerBuilder $container) {
$this->container = $container;
}
public function getContent() {
return new Response('toto');
}
public function setContent($content) {
}
public function getStatus() {
return 200;
}
public function setStatus($status) {
}
}
?>

View File

@@ -0,0 +1,27 @@
<?php
namespace Thelia\Core\Template;
/**
*
*
*
* @author Manuel Raynaud <mraynaud@openstudio.fr>
*
*/
interface ParserInterface {
/**
*
*/
public function getContent();
public function setContent($content);
public function getStatus();
public function setStatus($status);
}
?>

View File

@@ -31,7 +31,8 @@ class TheliaBundle extends Bundle {
$container->addScope( new Scope('request')); $container->addScope( new Scope('request'));
$container->register('request', 'Symfony\Component\HttpFoundation\Request'); $container->register('request', 'Symfony\Component\HttpFoundation\Request')
->setSynthetic(true);
$container->register('controller.default','Thelia\Controller\DefaultController'); $container->register('controller.default','Thelia\Controller\DefaultController');
$container->register('matcher.default','Thelia\Routing\Matcher\DefaultMatcher') $container->register('matcher.default','Thelia\Routing\Matcher\DefaultMatcher')
@@ -45,7 +46,8 @@ 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\TheliaTemplate'); $container->register('parser','Thelia\Core\Template\Parser')
->addArgument(new Reference('service_container'));
/** /**
* RouterListener implements EventSubscriberInterface and listen for kernel.request event * RouterListener implements EventSubscriberInterface and listen for kernel.request event
*/ */
@@ -53,9 +55,10 @@ class TheliaBundle extends Bundle {
->setArguments(array(new Reference('matcher'))); ->setArguments(array(new Reference('matcher')));
/** /**
* @TODO think how to use kernel.view event for templating. In most of case controller doesn't return a Response instance * @TODO think how to use kernel.view event for templating. In most of case (in Thelia) controller doesn't return a Response instance
*/ */
//$container->register('listener.view') $container->register('listener.view','Thelia\Core\EventSubscriber\ViewSubscriber')
->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'))
@@ -63,7 +66,8 @@ class TheliaBundle extends Bundle {
$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')));
/** /**

View File

@@ -4,7 +4,7 @@ namespace Thelia\Routing\Matcher;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Matcher\RequestMatcherInterface; use Symfony\Component\Routing\Matcher\RequestMatcherInterface;
use Thelia\Controller\NullController; use Thelia\Controller\NullControllerInterface;
/** /**
* Default matcher when no action is needed and there is no result for urlmatcher * Default matcher when no action is needed and there is no result for urlmatcher
@@ -15,7 +15,7 @@ class DefaultMatcher implements RequestMatcherInterface{
protected $controller; protected $controller;
public function __construct(NullController $controller) { public function __construct(NullControllerInterface $controller) {
$this->controller = $controller; $this->controller = $controller;
} }

View File

@@ -22,11 +22,9 @@ if( false === in_array($request->getClientIp(), $trustIp)){
$thelia = new Thelia('dev', true); $thelia = new Thelia('dev', true);
//var_dump($thelia->getContainer());
$response = $thelia->handle($request)->prepare($request)->send(); $response = $thelia->handle($request)->prepare($request)->send();
$thelia->terminate($request, $reponse); $thelia->terminate($request, $response);
?> ?>