从树枝上阅读 yaml



前言:在 ez4 中,我记得有一个 TPL 函数来读取 ini 设置,我们曾经使用它来传递特定位置或 id,然后我们可以使用这些位置或 ID 渲染某些内容。

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

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

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

您可以在格式<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 发布范围。

然后,您可以使用配置解析程序通过以下方式获取当前范围内的参数:

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

如果你安装了Legacy Bridge,如果不存在Symfony容器参数,这甚至可以回退到传统的INI设置:

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

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

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

这里我们有 2 个包装树枝函数

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

=> ezpublish siteaccessmatch

{{cjw_config_get_parameter( 'mailer_transport' )}}

=> 核心 symfony yaml 阅读器,无需站点访问权限

你可以在 eZ 4 中做很多事情,但并不总是对你的应用程序设计有好处。 ezini能够从模板中读取配置,但现在在eZ平台和扩展Symfony中,您需要尊重更常见的模式。IMO的观点不应该那么聪明。

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

您还可以使用 Twig 全局,它可以允许您执行 2 项全局操作:

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

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

(2(:请不要全局注入服务容器不好

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

最后,我认为用例不是一个常见的用例:

我们过去常常使用它来传递特定的位置或 ID,然后我们可以用它来渲染某些内容。

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

相关内容

  • 没有找到相关文章

最新更新