Symfony 如何在 base.html.twig 上包含控制器

Symfony how to include controller on base.html.twig

我有一个小问题,我是 symfony 的新手,我创建了一个控制器和一个菜单模板,我想将其集成到我的 base.html.twig。

我绝对需要调用控制器,因为我正在测试会话变量是否为空。

    {% block menu %}
    {% include 'menu/index.html.twig' %}
    {% endblock %}
    
    <body>
        {% block body %}{% endblock %}
    </body>

所以我尝试了这个(它工作得很好但是它没有调用我的控制器所以当我在会话中进行测试时它不会工作....)

我进行了搜索,但无法包含控制器而不是模板...

提前致谢

不应从树枝调用控制器。 EOT

您需要将代码从控制器移动到服务或助手。 那么你应该运行来自控制器的服务。

此外,您需要创建一个新的 twig 函数并在该函数中调用 service/helper 代码。

这样代码形式的控制器将以正确的方式在 twig 中执行。

在 Symfony 中,您不能从 twig 内部调用 Controller,您可以做的是将变量存储在 Controller 中,然后从 twig 内部调用这些变量。

例如,在您的情况下,您在控制器中创建变量并将其保存在会话中,如下所示:

//...
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 %}