将参数传递给所有视图

时间:2012-03-25 08:17:38

标签: controller symfony parameter-passing twig

我想在所有Twig视图中显示用户名/最后连接日期/时间和其他一些信息(这些视图都来自常见的Twig布局)。

如何在不必将每个控制器的参数显式传递给每个视图的情况下实现这一目标?

我是否必须创建一个Twig扩展,或者使用渲染来调用控制器/操作以从布局中检索用户名/连接/其他信息?

如果可能的话,我想要一个更简单的解决方案。

4 个答案:

答案 0 :(得分:10)

最简单的解决方案是从模板/布局中embed controllers。但请注意,子请求成本高昂,可能会显着影响性能。如果在某些时候你会注意到你的应用程序的开发版本很慢,那么就知道原因可能是每个请求上有几个子请求。

下一个解决方案是Twig extensions。在大多数情况下,您需要functions。你可以这样称呼它:

{{ user_info(user) }}

我开始先嵌入控制器,但我的开发版本达到了我的网站上的大多数页面在30秒内超时的程度。我首先不知道原因,但是一旦我发现它,我用Twig扩展替换了所有的subrequsts。从那以后,表现恢复正常。

答案 1 :(得分:3)

用户可以作为预定义的全局变量访问,请查看this,如果要在所有模板中重复使用相同的模板片段,请查看include标记。

答案 2 :(得分:2)

我不知道这个问题是否在2012年发布时是否可用,但我使用的是Twig Globals。

来自http://twig.sensiolabs.org/doc/advanced.html#globals

  

全局

     

全局变量与任何其他模板变量一样,除此之外   它可用于所有模板和宏:

$twig = new Twig_Environment($loader);
$twig->addGlobal('text', new Text());
  

然后,您可以在模板中的任何位置使用文本变量:

{{ text.lipsum(40) }}

我把代码放在每次调用的地方,比如控制器构造函数或类似的东西。

答案 3 :(得分:0)

上个月有这个用例。转向render命令,它确实很有效,因为被叫控制器操作不必定义@Route ...甚至不是@Template,但这取决于你;)