0

在我的布局(Twig)中,我想从Middleware authentication中检索一个值。

如果我把,在templates.global.pĥp:

'twig' => [
        'globals' => [
            // Variables to pass to all twig templates
            'auth' => (new \Zend\Authentication\AuthenticationService())->hasIdentity(),
        ],
    ],

并在布局 default.html.twig

{% if auth %}
    Connect
{% else %}
    Not connect
{% endif %}

这段代码有效,但是,它是一个好方法吗?

谢谢 :)

4

1 回答 1

2

这不是一个好方法。首先,使用配置文件设置全局模板数据是针对静态数据的。如果要缓存配置,在配置中创建服务将失败。我不了解 zend 拍卖服务,但最好从服务管理器或您正在使用的任何其他容器中获取它。通过这种方式,您可以确保在您的应用程序中的任何地方都在使用相同的服务。

对于模板中需要的公共变量或服务,我有一个围绕TemplateRenderer的包装器。因此,我没有调用原始模板渲染器,而是调用我自己的类,并在其中使用公共数据填充模板。

您还可以使用TemplateRendererInterface::addDefaultParam注入默认参数。在任何其他中间件中,您可以注入模板渲染器,设置所需的默认数据,然后在您的模板中访问它。

于 2017-11-19T20:10:32.243 回答