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

问题描述 投票:0回答:3

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

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

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

所以我尝试了这个(它工作完美,但它没有调用我的控制器,所以当我在会话上进行测试时它不会工作......)

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

提前致谢

php symfony twig
3个回答
1
投票

在 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 %} 

0
投票

控制器不应该从树枝上调用。环氧乙烷

您需要将代码从控制器移动到服务或助手。 然后你应该从控制器运行该服务。

此外,您还需要创建一个新的 twig 函数并在该函数中调用服务/帮助程序代码。

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


0
投票

答案是肯定的,您可以并且可能希望在 twig 中包含控制器,例如多个页面共有的菜单,但与作用于这些页面的控制器没有关系。这里有一个官方文档:https://symfony.com/doc/current/templates.html#embedding-controllers

提示:对此类包含使用缓存技术。

© www.soinside.com 2019 - 2024. All rights reserved.