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