繁体   English   中英

从树枝上读yaml

[英]reading yaml from twig

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

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

问题是否存在从树枝模板内读取yaml文件的本地方法? 在搜索了文档和可用的包装师之后,我什么都找不到:/

看看我们的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 siteaccessmatching

{{cjw_config_get_parameter( 'mailer_transport' )}}

=>没有站点访问权限的核心Symfony Yaml阅读器

您可以在eZ 4中做很多事情,但并不总是非常适合您的应用程序设计。 ezini能够从模板读取配置,但是现在在eZ Platform中,并且通过扩展Symfony,您需要尊重更常见的模式。 海事组织的观点不应那么聪明。

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

您还可以使用Twig Globals,它可以让您执行2种全局操作:

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

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

(2):请不要在全局范围内注入服务容器,这是不好的

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

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

我们曾经使用它来传递特定的位置或ID,然后可以使用它们呈现某些内容。

在大多数情况下,传递来自配置的ID来呈现某些东西是个坏主意,最好组织内容结构,让您使用PHP API提取所需的位置。 (无需配置ID,无需担心开发,阶段,预生产和生产体系结构)

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

您可以使用格式<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范围。

然后,您可以使用config解析器通过以下方式获取当前作用域中的参数:

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

如果您安装了Legacy Bridge,则在不存在Symfony容器参数的情况下,它甚至可以退回到旧版INI设置:

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

免责声明:有人说使用config resolver是不好的做法,但是对于更简单的用例,IMO是可以的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM