如何指定一组控制器(例如管理部分的所有控制器)并分配一个可由这些控制器呈现的所有模板访问的变量或服务?
Laravel中的等价物将为不同的路由组指定不同的中间件。
我不是在寻找这些答案:
全局变量 - 变量/服务将被不必要地注入某些控制器(例如前端控制器)。
在模板中嵌入其他控制器 - 一种缓慢,冗长和重复的解决方法。
答案 0 :(得分:1)
要指定要传递额外参数的控制器,让我们使用AdminInterface等实现一些接口。然后将params传递给view,有几种方法:
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 /传递属性包含你的params的请求,并通过$ 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。 希望能帮到你。