1

我正在使用事件侦听器运行一些代码:

namespace Acme\Bundle\NewBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;

class RequestListener
{

    public $value;

    public function onKernelRequest(GetResponseEvent $event)
    {

        $this->value = 1;   

    }

}

在这两种情况下,我需要能够访问类属性(在我的示例中只是 $value):

(a) 在从路由执行的普通控制器中。

(b) 从 Twig 模板(使用 Twig 渲染命令)。我不想将任何东西传递给 Twig 来执行此操作,因为它会针对每个请求执行操作。

......我该怎么做?我想我需要获取对象的实例,但考虑到它是创建它的事件,我不知道如何。

4

1 回答 1

1

类的attributes字段Request通常用于填充要由代码的其他部分使用的内容。例如,其中一个 Symfony 侦听器在其中设置_route参数。

您可以从$event对象获取请求:

$request = $event->getRequest();
$request->attributes->set('value', 1);

然后你会从控制器中得到它:

public function someAction(Request $request)
{
    $value = $request->attributes->get('value');

    // shorter but a bit less effective
    $value = $request->get('value');
}

在树枝中:

{{ app.request.attributes.get('value') }}

或者更短但效果稍差:

{{ app.request.get('value') }}

PS如果你问你要解决什么而不是如何解决实际上会更有效。您可能会想出一个复杂的非惯用解决方案来解决一个简单而常见的惯用解决方案。

于 2013-03-16T16:19:54.733 回答