Я пытаюсь использовать переменную ветки для доступа к атрибутам другой переменной ветки, которая не работала, пока я не нашел функцию «атрибуты». Работает хорошо, за исключением случаев, когда мне нужно получить доступ к вложенным атрибутам. Это не работает, когда переменная, содержащая атрибут, на самом деле является объектом + атрибут. Например:
{{ attribute(object1, variable) }}
, где переменная = имя, работает просто отлично.
{{ attribute(object1, variable) }}
, где переменная = object2.name, не работает.
Однако жестко закодированный тест {{ object1.object2.name }}
работает.
Вот как я дошел до этого момента ... У меня есть файл конфигурации yaml, который анализируется контроллером и передает его ветке в массиве с именем «config». Он содержит параметры для определения того, что отображается в шаблоне веточки.
fields:
- name: company.name
label: 'ODM'
indexView: true
recodrdView: true
- name: location
label: 'Location'
indexView: true
recordView: true
Кроме того, массив объектов (сущностей) передается в шаблон для рендеринга.
Вышеуказанное «fields.name» - это имя свойства объекта. Я перебираю массив объектов, а затем перебираю массив config.fields, чтобы определить, что отображать. Вот код веточки:
{% for data in datum %}
<tr>
{% for field in config.fields %}
{% if field.indexView %}
<td>{{ attribute(data, field.name }}</td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
Я получаю сообщение об ошибке:
Neither the property "company.name" nor one of the methods "company.name()", "getcompany.name()"/"iscompany.name()"/"hascompany.name()" or "__call()" exist and have public access in class "App\Entity\Odm".
Полагаю, я мог бы разделить строку field.name с помощью символа '.' разделитель, а затем сделать необходимое количество вызовов для атрибута, но я действительно надеюсь, что есть более красноречивое решение. Я также пробовал _context ['data.' ~ field.name] - там тоже не повезло.
Есть идеи?