前言:在 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'
其中default
、eng
和cro
是不同的 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,没有开发、阶段、预生产和生产架构的麻烦(