php - 如何使用Twig的属性函数访问嵌套对象属性

标签 php symfony twig

我正在尝试使用一个 Twig 变量来访问另一个 Twig 变量的属性,该变量在我找到“属性”函数之前不起作用。除了需要访问嵌套属性的情况外,效果很好。当包含属性的变量实际上是对象+属性时,它不起作用。例如:

{{ attribute(object1, variable) }} 其中变量=名称,工作得很好。 {{ attribute(object1, variable) }} 其中variable = object2.name 不起作用。 但是,{{ object1.object2.name }} 的硬编码测试确实有效。

这就是我如何达到这一点...我有一个 yaml 配置文件,该文件由 Controller 解析并将其传递给名为“config”的数组中的 twig。它包含用于定义 Twig 模板显示内容的参数。

fields:
  - name: company.name
    label: 'ODM'
    indexView: true
    recodrdView: true
  - name: location
    label: 'Location'
    indexView: true
    recordView: true

此外,对象(实体)数组被传递到模板进行渲染。

上面的“fields.name”是实体属性的名称。我迭代实体数组,然后迭代 config.fields 数组以确定要显示的内容。这是 Twig 代码:

{% 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 字符串。分隔符,然后对属性进行必要数量的调用,但我真的希望有一个更 Eloquent 解决方案。我也尝试过 _context['data.' ~ field.name] - 那里也不走运。

有什么想法吗?

最佳答案

如果您使用的是 Twig >= 2.10,则可以使用 reduce()过滤器:

{{ field.name|split('.')|reduce((carry, v) => carry ? attribute(carry, v) : null, data) }}

关于php - 如何使用Twig的属性函数访问嵌套对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56153143/

相关文章:

php - Symfony2 + Twig : Using an entity type field to store unsaved entities

symfony Twig 扩展 : 'only extend if'

twig - 使用祖父 block

php - 如何通过 PHP 将 .xls 转换为 .pdf?

php - 网站-即使pass1和pass2之间有错误,用户也可以编辑密码

mongodb - ReferenceOne 与 MongoDB

html - 如何在输入复选框旁边添加图像

php - 我们如何使用 PHP/Drupal 锁定表

php - 测试 monlog 包时出现 500 错误

symfony2 : how to make a form field not required on update