Печать ветки доступна из строки

Как напечатать доступную строку формы в ветке
В моем коде php

$data['fruits'] = array('apple', 'banana', 'orange');
$data['help_apple'] = 'This is help apple';
$data['help_banana'] = 'This is help for banana';
$data['help_orange'] = 'This is help for orange';

В шаблоне веточки

{% for fruit in fruits %}
{{ "help_" ~ fruit }}
{% endfor %}

Экран печати: help_apple, help_banana, help_orange
Как напечатать правильные данные, которые мне нужны для ключа помощи help_ fruit?

0

Решение

Вам нужно использовать функцию атрибута с _context. Протестировано на twigfiddle.com. Надеюсь это поможет.

{% for fruit in fruits %}
{# Here is how you do it #}
{{ attribute(_context, 'help_'~ fruit) }}
{% endfor %}
2

Другие решения

_context Переменная содержит все переменные в текущем контексте. Вместо использования attribute функция, Вы можете получить доступ к значениям _context также массив с регулярными скобочными обозначениями:

{% for fruit in fruits %}
{{ _context['help_' ~ fruit] }}
{% endfor %}

Я лично сделал бы это так, поскольку это более кратко и по моему мнению более ясно.

Возможно, вы захотите проверить неопределенные переменные при доступе к значениям _context массив. Я написал об этом в своем ответе на этот вопрос: Symfony2 — Как получить доступ к динамическим именам переменных в ветке.


Вы также спросили, возможно ли что-то подобное:

{% set attribute(context, 'help' ~ fruit, "value") %}

Это невозможно. Если вы хотите установить переменные с динамическими именами, вам нужно создать расширение Twig. Посмотрите на мой ответ на этот вопрос: Как установить имя переменной с динамическими переменными?

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

$data['fruits'] = ['apple', 'banana', 'orange'];
$data['help']   = [];
$data['help']['apple']  = 'This is help apple';
$data['help']['banana'] = 'This is help for banana';
$data['help']['orange'] = 'This is help for orange';
{% for fruit in fruits %}
{{ help[fruit] }}
{% endfor %}

Затем вы можете установить новые значения для значений справки в Twig, используя merge фильтр, вот так (хотя я не знаю, почему вы захотите сделать это в Twig):

{# Set single value #}
{% set help = help|merge({
banana: 'New help for banana',
}) %}

{# Or multiple values #}
{% set help = help|merge({
apple:  'An apple a day keeps the doctor away',
orange: 'Orange is the new black',
}) %}
0

По вопросам рекламы [email protected]