我正在使用事件监听器运行一些代码:
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来执行此操作,因为它会在每次请求时执行操作。
......我该怎么做?我想我需要获取对象的实例,但考虑到它是创建它的事件,我看不出如何。
答案 0 :(得分: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');
}
在Twig中:
{{ app.request.attributes.get('value') }}
或更短但效果稍差:
{{ app.request.get('value') }}
P.S。如果你问你想要解决什么而不是如何,那实际上会更有效。您可能会想出一个简单而常见的惯用解决方案的复杂的非惯用解决方案。