Как я могу использовать атрибут веточки в многомерном массиве? - PullRequest
0 голосов
/ 04 февраля 2019

Я обращаюсь к динамическим данным из массива:

{% for key, value in columns_arr %}
  {% for k,v in group %}
    var {{ value }} = "{{ attribute(v, value) }}";
  {% endfor %}
{% endfor %} 

Это хорошо работает для name и id (см. Ниже).В примере name атрибут ...

{{ attribute(v, value) }}

заменяет:

{{ v.name }}

, а в примере id он заменяет ...

{{ v.id }}

Но это не работает с type, потому что здесь мне действительно нужно заменить:

{{ v.type.name }}

Итак, мой вопрос, как это будет выглядеть в функции атрибута?Я попытался {{ attribute(v.name, value) }}, но я получаю ошибку

Невозможно получить доступ к атрибуту ("тип") в строковой переменной ("ID").

group:

array:4 [▼
  0 => Fields {#7444 ▼
    -id: 1
    -name: "ID"
    -unique_id: "6ab8c870ed"
    -productgroup: PersistentCollection {#7448 ▶}
    -type: Type {#7525 ▼
      +__isInitialized__: true
      -id: 2
      -name: "hidden"
      -unique_id: "5e1086c862"
      -label: "hidden"
       …2
    }
  }
  1 => Fields {#7526 ▶}
  2 => Fields {#7530 ▶}
  3 => Fields {#7534 ▶}
]

columns_arr:

array:3 [▼
  0 => "id"
  1 => "name"
  2 => "type"
]

Мой подход к этому вопросу:

Как проверить многомерный массив Twig на значения?

{% for key, value in columns_arr %}
  {% for k,v in group %}
       {% for k1,v1 in v %}
          var {{ value }} = "{{ attribute(name, v1) }}";
       {% endfor %} 
  {% endfor %}
{% endfor %} 

Но это дает мне ошибку, моя страница больше не загружается.

Другой подход такой:

{{ attribute(v, [value.name]) }}

Но я получаю ошибку:

Невозможно получить доступ к атрибуту («имя») в строковой переменной («тип»).

1 Ответ

0 голосов
/ 04 февраля 2019

Если вы можете изменить массив столбцов на что-то вроде 2 => 'type.name', вы можете использовать следующий фрагмент для считывания вложенных данных:

{% for value in data %}
    {% for column in columns %}
        {% set output = value %}
        {% for method in column|split('.') if method != '' %}
            {% set output = attribute(output, method) | default('') %}
        {% endfor %}
        {{ output }}
    {% endfor %}
{% endfor %}

demo

...