Чтение ямля из ветки

Предисловие: в ez4 я помню, что была функция tpl для чтения настроек ini, мы использовали ее для передачи определенных местоположений или идентификаторов, с помощью которых мы могли бы затем визуализировать определенный контент.

В ezplatform я сейчас делаю то же самое, но с помощью PreContentViewListener (в PreContentViewListener читайте файл yml и переходите в представление в качестве параметров), но это не похоже на правильный путь, так как PreContentViewListener не всегда срабатывает в пользовательских контроллерах например.

Вопрос Есть ли собственный способ чтения файлов yaml из шаблонов веток? После поиска документов и доступных упаковщиков я ничего не могу найти:/

3 ответа

Решение

Если ваши потребности просты (например, чтение параметров контейнера), вы также можете использовать компонент распознавателя конфигурации 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'

где default, eng а также cro разные eZ Публикация областей.

Затем вы можете использовать преобразователь конфигурации для извлечения параметра в текущей области с помощью:

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

Если у вас установлен Legacy Bridge, это даже возвращает устаревшие настройки INI, если не существует параметра контейнера Symfony:

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

Отказ от ответственности: Некоторые говорят, что использование config resolver - плохая практика, но для простых случаев использования это нормально, 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 siteaccessmatching

{{cjw_config_get_parameter( 'mailer_transport' )}}

=> Core Symfony Yaml Reader без доступа к сайту

Вы можете сделать много вещей в 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 Site Access, если не внедряет свой собственный сервис (2), для управления доступом к конфигурации может быть лучше.

И, наконец, я думаю, что вариант использования не является распространенным:

мы использовали это для передачи определенных местоположений или идентификаторов, с помощью которых мы могли бы затем визуализировать определенный контент.

В большинстве случаев плохая идея передавать идентификаторы, исходящие из конфигурации, для рендеринга чего-либо, гораздо лучше организовать структуру содержимого, чтобы вы могли выбирать нужное местоположение с помощью PHP API. (без идентификатора в конфигурации нет проблем с архитектурой dev, stage, preprod и prod)

Другие вопросы по тегам