Symfony中是否有标准/首选的方法将公共变量传递到基础模板?每个页面上都有一些东西,比如菜单中的用户名,我显然不想记住为每个控制器添加。
我的想法是为模板创建一个控制器并返回数据。但想知道是否还有更多的内置功能来处理这一问题。
return $this->render(
'@secured/account/profile.html.twig',
array('userForm' => $form->createView(),
'base' => call_base_layout_controller()
);
{# templates/account/profile.html.twig #}
{% extends '@secured/base.html.twig' %}
{% block body %}
{% endblock %}
我在当前版本的文档中找不到它,但据我所知,您仍然可以通过框架为每个请求自动定义的app
trich变量直接从trich访问很多内容https://symfony.com/doc/3.4/templating/app_variable.html
例如,您可以获得当前用户的用户名,如下所示:
{{ app.user.username }}
app
保存user
、request
、session
、environment
和debug
,因此您可以将所需的其他值放入会话或环境变量中,并直接在模板中获取/呈现这些值。
如果您想要的数据与经过身份验证的用户有关,我推荐Arleigh Hix所说的
否则,您可以创建一个扩展AbstractExtension
的类,并用您的逻辑填充它这个类上的任何内容都可以从所有的小树枝页面访问
// src/Twig/AppExtension.php
namespace AppTwig;
use TwigExtensionAbstractExtension;
use TwigTwigFunction;
class AppExtension extends AbstractExtension
{
public function getFunctions()
{
return [
new TwigFunction('myGlobalData', [$this, 'myGlobalData']),
];
}
public function myGlobalData()
{
return "what ever you want ( ex: a query resualt..)";
}
}
在你的树枝模板上,就这样称它为
{{ myGlobalData() }}
即使它重新运行一个数组,你也可以访问它