从树枝读取 yaml

reading yaml from twig

前言:在ez4我记得有一个tpl函数来读取ini设置,我们过去常常用它来传递特定的位置或id,然后我们可以用它来渲染某些内容.

在 ezplatform 中,我现在正在做同样的事情,但是通过使用 PreContentViewListener(在 PreContentViewListener 中读取一个 yml 文件并作为参数传递到视图中),但这感觉不像是正确的方法,因为 PreContentViewListener 没有'总是被触发,例如在自定义控制器中。

问题 有没有一种从树枝模板中读取 yaml 文件的本机方法?在搜索文档和可用的 packagists 之后,我找不到任何东西:/

看看我们的 CjwPublishToolsBundle。 https://github.com/cjw-network/CjwPublishToolsBundle https://github.com/cjw-network/CjwPublishToolsBundle/blob/master/Services/TwigConfigFunctionsService.php

这里我们有 2 个 wrapper twig 函数

{{cjw_config_resolver_get_parameter ( 'yamlvariablename', 'namespace default ezsettings') }}

=> ezpublish 站点访问匹配

{{cjw_config_get_parameter( 'mailer_transport' )}}

=> 核心 symfony yaml reader 没有站点访问权限

您可以在 eZ 4 中做很多事情,但并不总是适合您的应用程序设计。 ezini 能够从模板中读取配置,但现在在 eZ Platform 和扩展 Symfony 中,您需要遵守更常见的模式。 IMO 观点不应该那么聪明。

然后从侦听器(PreContentViewListener 或您自己的)向视图注入变量是个不错的主意。

您还可以使用 Twig Globals,它可以让您做 2 件全局事情:

  • 注入变量(1)
  • 注入服务(2)

看这里:https://symfony.com/doc/current/templating/global_variables.html

(2): 请不要在全局注入服务容器,这很糟糕

(1):我不记得 Twig Globals 是否支持站点访问,如果不注入您自己的服务 (2) 来管理对配置的访问可能会更好。

最后,我认为用例并不常见:

we used to use this to pass specific locations or id's with which we could then render certain content.

大多数情况下,传递来自配置的 id 来呈现某些内容是个坏主意,组织内容结构以让您使用 PHP API。 (配置中没有 id,开发、阶段、预生产和生产架构没有麻烦)

如果您的需求很简单(即读取容器参数),您还可以使用 eZ Publish 配置解析器组件,它在任何 Twig 模板中都可用 ezpublish.configResolver

您可以按 <namespace>.<scope>.<param_name> 格式指定站点访问感知参数,如下所示:

parameters:
    app.default.param.name: 'Default param value'
    app.eng.param.name: 'English param value'
    app.cro.param.name: 'Croatian param value'

其中 defaultengcro 是不同的 eZ Publish 范围。

然后您可以使用配置解析器在当前范围内获取参数:

{{ ezpublish.configResolver.parameter('param.name', 'app') }}

如果您安装了 Legacy Bridge,如果不存在 Symfony 容器参数,这甚至会回退到旧 INI 设置:

{{ ezpublish.configResolver.parameter('SiteSettings.SiteName', 'site') }}

免责声明:有人说使用配置解析器是不好的做法,但对于更简单的用例来说没关系,IMO。