Чтение ямля из ветки
Предисловие: в 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)