如何将变量传递给 Symfony 3 中多个控制器的模板?
How to pass a variable to templates for multiple controllers in Symfony 3?
如何指定一组控制器(例如,管理部分的所有控制器)并分配可在这些控制器呈现的所有模板中访问的变量或服务?
Laravel 中的等价物是为不同的路由组指定不同的中间件。
我不是在寻找这些答案:
全局变量 - variable/service 会被不必要地注入到某些控制器(例如前端控制器)。
在模板中嵌入其他控制器 - 一种缓慢、冗长且重复的解决方法。
要指定您想要传递额外参数的控制器,让我们使其实现一些类似 AdminInterface.Then 的接口来传递参数以查看,有几种方法:
1/听众 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 内核事件的更多详细信息,请参阅 doc。
希望对你有帮助。
如何指定一组控制器(例如,管理部分的所有控制器)并分配可在这些控制器呈现的所有模板中访问的变量或服务?
Laravel 中的等价物是为不同的路由组指定不同的中间件。
我不是在寻找这些答案:
全局变量 - variable/service 会被不必要地注入到某些控制器(例如前端控制器)。
在模板中嵌入其他控制器 - 一种缓慢、冗长且重复的解决方法。
要指定您想要传递额外参数的控制器,让我们使其实现一些类似 AdminInterface.Then 的接口来传递参数以查看,有几种方法:
1/听众 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 内核事件的更多详细信息,请参阅 doc。 希望对你有帮助。