Symfony 2.1 kernel.request事件不能覆盖_controller

时间:2012-09-30 23:38:16

标签: php symfony twig symfony-2.1

我正在尝试向特定控制器发送一些请求。我在这里关注Kris Wallsmith的回答:

Symfony2 routing rules from database

但是,当我覆盖请求的_controller属性时,我的模板不再使用基本模板进行修饰。

我做错了什么?

这是我的听众服务:

// src/Acme/DemoBundle/RequestListener.php
namespace Acme\DemoBundle;

use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;

class RequestListener
{
    public function onKernelRequest(GetResponseEvent $event)
    {
        if (some logic) {
            $request = $event->getRequest();
            $request->attributes->set('_controller', 'Acme\DemoBundle\Controller\DefaultController::testAction');
        }
    }
}

这是我的模板:

{# src/Acme/DemoBundle/Resources/views/Default/test.html.twig #}
{% extends '::base.html.twig' %}

{% block title %}Test{% endblock %}

{% block body %}
    {{ body | markdown }}
{% endblock body %}

这是我的控制器:

// src/Acme/DemoBundle/Controller/DefaultController.php

/**
 * @Route("/test")
 * @Template()
 */
public function testAction()
{
    return $this->render('AcmeHelloBundle:Default:test.html.twig', array('body' => 'test'));
}

2 个答案:

答案 0 :(得分:0)

不知道它是否有帮助,但在2.0中我使用

$controller = $event->getController();
$event->setController(controller);

答案 1 :(得分:0)

您必须使用kernel.controller事件。 http://symfony.com/doc/2.1/book/internals.html#kernel-controller-event

FilterControllerEvent作为参数传递给侦听器方法,并使用事件类的setController, getController方法。