如何将Controller变量传递给Symfony2中的EventListener?

时间:2011-11-18 18:12:31

标签: symfony twig event-listener

我厌倦了在Symfony2的每个动作结束时写这个:

return $this->render('Project:Bundle:view.twig', array(
                                     'foo' => 1,
                                     'bar' => 2
                                 ));

所以我试图在动作运行后挂钩请求生命周期,以便为自己节省一些打字。我希望能够在我的控制器中执行与此类似的操作:

$this->params = array(
    'foo' => 1,
    'bar' => 2
);

然后,侦听器会将参数传递给渲染器,并使用操作名称自动检测模板。我意识到我需要使用事件监听器来实现这一点,但我似乎无法在正确的时间进入生命周期......

  • kernel.controller 很好,因为我可以使用控制器,但是在操作运行之前,所以$ this-> params将不会被设置
  • kernel.response 是在动作运行之后,但我似乎无法从此处获取控制器本身

仅供参考 - 我有一个Zend背景,这是我第一次使用Symfony2时(obv)...如果我以完全错误的方式接近这个问题,请大喊!

1 个答案:

答案 0 :(得分:2)

如果您正在使用SensioFrameworkExtraBundle,则可以使用@Template()注释并返回一个数组:

<?php

namespace Acme\FooBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class BarController
{
    /**
     * @Template()
     */
    public function bazAction()
    {
        return array(
            'some_value' => $someValue;
        );
    }
}

注释告诉它根据包,控制器和操作名称(在本例中为AcmeFooBundle:Bar:baz.html.twig)在默认位置查找视图。