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

3

我已经厌倦了在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是在操作已运行之后,但似乎我无法从这里访问控制器本身。
FYI - 我有Zend背景,这是我第一次使用Symfony2... 如果我以完全错误的方式解决这个问题,请大喊!
1个回答

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

这个注解告诉程序根据bundle、controller和action的名称(在本例中为AcmeFooBundle:Bar:baz.html.twig)在默认位置查找视图。


太棒了,这正是我要的!谢谢! - Mathew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接