我有一个小问题,我是 symfony 的新手,我创建了一个控制器和一个菜单模板,我想将其集成到我的 base.html.twig 中。
我绝对需要调用控制器,因为我正在测试以了解会话变量是否为空。
{% block menu %}
{% include 'menu/index.html.twig' %}
{% endblock %}
<body>
{% block body %}{% endblock %}
</body>
所以我尝试了这个(它工作完美,但它没有调用我的控制器,所以当我在会话上进行测试时它不会工作......)
我进行了搜索,但无法包含控制器而不是模板...
提前致谢
在 Symfony 中,你不能从树枝内部调用控制器,你可以做的是将变量存储在控制器内部,然后从树枝内部调用这些变量。
例如,在您的情况下,在控制器中创建变量并将其保存在会话中,如下所示:
//...
class BaseController extends AbstractController
{
//...
$session->set('var_i_need', 222);
return $this->render('menu/index.html.twig', [
'controller_name' => 'BaseController',
]);
}
然后在树枝内你会得到变量:
{% set var_i_need = app.session.get('var_i_need') %}
并测试它是否为空:
{% if var_i_need is not NULL %}
{% ... %}
{% endif %}
控制器不应该从树枝上调用。环氧乙烷
您需要将代码从控制器移动到服务或助手。 然后你应该从控制器运行该服务。
此外,您还需要创建一个新的 twig 函数并在该函数中调用服务/帮助程序代码。
这样,代码表单控制器将以正确的方式在 twig 中执行。
答案是肯定的,您可以并且可能希望在 twig 中包含控制器,例如多个页面共有的菜单,但与作用于这些页面的控制器没有关系。这里有一个官方文档:https://symfony.com/doc/current/templates.html#embedding-controllers
提示:对此类包含使用缓存技术。