【发布时间】:2019-05-15 15:41:18
【问题描述】:
我正在尝试使用 twig 变量来访问另一个 twig 变量的属性,该变量在我找到“属性”函数之前不起作用。效果很好,除非我需要访问嵌套属性。当包含属性的变量实际上是对象+属性时,它不起作用。例如:
{{ attribute(object1, variable) }} 其中变量 = 名称,工作得很好。
{{ attribute(object1, variable) }} 其中变量 = object2.name,不起作用。
但是,{{ object1.object2.name }} 的硬编码测试确实有效。
这就是我如何做到这一点的...我有一个 yaml 配置文件,该文件由控制器解析并将其传递给名为“config”的数组中的 twig。它包含定义树枝模板显示的内容的参数。
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] - 也没有运气。
有什么想法吗?
【问题讨论】: