Php 如何将变量传递给Symfony 3中多个控制器的模板?

Php 如何将变量传递给Symfony 3中多个控制器的模板?,php,symfony,templates,controllers,Php,Symfony,Templates,Controllers,如何指定一组控制器(例如,管理部分的所有控制器),并分配一个变量或一个服务,该变量或服务可在这些控制器提供的所有模板中访问 Laravel中的一个等价物是为不同的路由组指定不同的中间件 我不是在寻找这些答案: 全局变量-变量/服务将不必要地注入某些控制器,例如前端控制器 在模板中嵌入其他控制器-这是一个缓慢、冗长和重复的解决方法 要指定要传递额外参数的控制器,让其实现一些接口,如AdminInterface。然后要传递参数以查看,有几种方法: 1/listener到kernel.view: pu

如何指定一组控制器(例如,管理部分的所有控制器),并分配一个变量或一个服务,该变量或服务可在这些控制器提供的所有模板中访问

Laravel中的一个等价物是为不同的路由组指定不同的中间件

我不是在寻找这些答案:

全局变量-变量/服务将不必要地注入某些控制器,例如前端控制器

在模板中嵌入其他控制器-这是一个缓慢、冗长和重复的解决方法


要指定要传递额外参数的控制器,让其实现一些接口,如AdminInterface。然后要传递参数以查看,有几种方法:

1/listener到kernel.view:

public function onKernelView(GetResponseForControllerResultEvent $event)
    {
        $result = $event->getControllerResult();

        if (!$result instanceof AdminInterface || !isset($result['template']) || !isset($result['data'])) {
            return;
        }

        $data = array_merge($result['data'], array('myvar' => 'value'));
        $rendered = $this->templating->render($result['template'], $data);

        $event->setResponse(new Response($rendered));
    }
2/通过$request->attributes->get'myVar'将包含参数的请求传递给属性,并将其直接传递给模板

public function onKernelController(FilterControllerEvent $event)
{
    $controller = $event->getController();
    if (!$result instanceof AdminInterface) {
       return;
    }
    $event->getRequest->attributes->set('myvar', 'value');
}
有关symfony内核事件的更多详细信息,请参阅。
希望对您有所帮助。

您能展示您的代码吗?Symfony控制器通常会返回模板的响应版本,因此没有用于中间件的空间。通常,当Symfony控制器返回响应时,它是一个完全解析的字符串。如果您希望能够在控制器之后处理它,则需要返回一组参数,其中包含标识模板的内容,然后设置一个Kernel::Response侦听器来处理额外参数和响应对象的实际创建。我可以想到两个选项,您基本上已经说过,它们都是1服务-如果用户有权限,或者请求是到正确的url/控制器等2中间件,则有一个获取变量的函数-使用事件侦听器在正确的请求上设置变量。