Как в twig шаблоне получить данные из переменной, в название которой нужно подставить значение из другой переменной?
Есть строчка кода из tpl шаблона:
<?php echo isset(${'oth_bank_bill_bank' . $language['language_id']}) ? ${'oth_bank_bill_bank' . $language['language_id']} : ''; ?> |
<?php echo isset(${'oth_bank_bill_bank' . $language['language_id']}) ? ${'oth_bank_bill_bank' . $language['language_id']} : ''; ?>
Как вот тоже самое сделать в twig шаблоне?
Дополнительно:
Просто пофилософствую немного. Может быть, это даст вам какие-то идеи.
Зачем вообще нужно было вводить в обиход нашей прекрасной PHP-экосистемы какие-то сторонние шаблонные языки? Ведь PHP и так прекрасно сочетается с HTML: расставил вопросики со знаками "больше" и "меньше", да и работает.
И второй вопрос: почему у PHP такая плохая репутация? Ведь лично я считаю, что современному PHP ни Python, ни JavaScript даже в подмётки не годятся.
Ответ на оба вопроса: чудовищный говнокод, который стали писать люди, мешая как попало логику и отображение. Исправить баг в этой куче из функций, циклов, ветвлений, перемешанных с развесистым HTML, было просто невозможно. И наш PHP заработал репутацию очень плохого языка.
И вот тогда умные люди решили: а что если мы придумаем для PHP отдельный язык шаблонов, который будет максимально урезан, и программистам придётся не просто отделять HTML от PHP, но и хорошенько подготавливать переменные для этих шаблонов, ведь даже несложную логику на этом языке шаблонов писать очень больно. Это решение (и некоторые другие) настолько улучшило PHP код, что язык ожил, стал развиваться и снова стал нравиться людям, которые постоянно его улучшают.
Так вот... Может быть, вам подготовить все переменные для twig заранее? Чтобы не было вот этой боли?
Этот комментарий просто "на подумать"...
сейчас до многих людей наконец дошло для чего шаблонизаторы, а не спагетти–код.
а хороший шаблонизатор не должен давать возможность исполнять произвольный код в шаблоне, только свой синтаксис.
твиг из таких.
И ещё. Не забывайте в любых CMS чистить кэш после любых изменений.
Вот есть что-то похожее на стэке. Там в первом ответе как раз всё хорошо расписано.
https://stackoverflow.com/questions/24697313/how-t...
Но я ещё раз вам рекомендую перенести эту логику в PHP
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы получить данные из переменной, название которой нужно подставить значение из другой переменной в Twig шаблоне, можно воспользоваться функцией attribute. Эта функция позволяет обращаться к свойствам объекта или элементам массива, используя динамическое имя.
Пример использования функции attribute:
{% set mainVariable = 'foo' %} {% set foo = {'bar': 'baz'} %} {{ attribute(_context, mainVariable).bar }}
В данном примере мы сначала устанавливаем значение переменной mainVariable равным 'foo', а затем создаем массив foo с элементом 'bar' равным 'baz'. Затем мы используем функцию attribute и передаем ей _context (специальную переменную, содержащую все данные шаблона) и значение переменной mainVariable. Функция attribute получает значение переменной mainVariable ('foo') и обращается к элементу 'bar' массива foo, выводя его значение 'baz'.
Таким образом, используя функцию attribute, мы можем динамически обращаться к переменным в Twig шаблоне, и получать нужные данные, даже если название переменной формируется из другой переменной.