我有一个使用SF 3.4的大型应用程序,我需要找到一种更好的方法,根据每个页面加载的用户进行自定义渲染
现在我们有了侧菜单、页脚、侧菜单收藏夹、应用程序菜单以及是否超时的侦听器。这些侦听器通过render函数触发主题事件,该函数添加与用户访问/收藏夹/超时有关的信息。twig中的角色无法做到这一点,因为我们的菜单收藏夹之类的东西随时都在变化
我们重写Controller render方法来调度该主题事件,并将返回的内容与呈现函数的参数数组合并,如下所示:
protected function render($view, array $parameters = array(), Response $response = null)
{
$themeEvent = new ExampleThemeEvent($this->getUser(), $this->getMyMenuApplication());
$result = $this->getDispatcher()->dispatch(ExampleThemeEvent::NAME, $themeEvent);
$parameters = array_merge($result->getModel(),$parameters);
return parent::render($view, $parameters, $response);
}
正因为如此,我们的大多数控制器都扩展了ExampleTheMacontroller,而不仅仅是控制器,所以我们想要的每个页面都有这些功能。
这工作正常,但从SF 3.4开始,渲染方法已被标记为final,不应被重写。在不重写render方法的情况下,实现此目的的最佳方法是什么?还有别的地方可以派我们的主题活动吗
我们尝试了onKernelController订阅者/监听器,但没有效果,因为我们需要向容器中添加额外的视图参数,而此时无法完成
谢谢!
对于这种用户特定的更改,除了将全局变量传递给twig之外,我还想查看嵌入控制器。您可以使用不同的控制器呈现部分响应,例如,仅负责收藏夹。