【问题标题】:twig variable inside object method对象方法内的树枝变量
【发布时间】:2014-09-10 12:49:09
【问题描述】:

嗨,我也是 Symfony 和 twig 的新手。我试图将字符串变量作为方法的名称传递。让我们看一下例子:

{% for user in pagination %}
    <tr {% if loop.index is odd %}class="color"{% endif %}>
        {% for value in columns  %}
            <td>{{ user.value }}</td>
        {% endfor %}
    </tr>
{% endfor %}

此代码导致错误,未定义对象的方法值
变量列包含一个列数组(id、name、email...)
请有人告诉我正确的语法。
类似:

<td>{{article[value]}}</td>
<td>{{article.{{value}}}}</td>

非常感谢!

【问题讨论】:

  • 在你的例子中是分页的列值,还是用户的值?
  • 尝试使用{{ dump(columns) }} 并将其粘贴到您的帖子中。

标签: symfony twig


【解决方案1】:

当您在 Twig 变量上引用对象属性时,Twig 引擎会在后台尝试以多种方式访问​​ PHP 对象上的该属性。

假设您的user 对象是Your\Bundle\Entity\User 类的实例。 TWIG 将尝试通过尝试访问以下内容来解析user.value(我认为按此顺序)

  • Your\Bundle\Entity\User::value()
  • Your\Bundle\Entity\User::getValue()
  • Your\Bundle\Entity\User::$value

在所有情况下,这些方法/属性必须是 public 才能让 Twig 访问它们。

简而言之,我认为这不是您的模板的问题,而是底层对象的问题。

【讨论】:

  • 谢谢,但我想把值变量的值放在那里。听起来很奇怪
  • 那你就用{{ value }}
  • 我认为他真正想做的是在用户对象上动态调用一系列getter,使用for循环输出所有有趣的东西。我不认为你可以用 Twig 做到这一点。也许另一种选择是将getEverything() 方法添加到 User 对象,该方法将数组中的所有字段(如果您也想要字段名,则为关联数组),然后将结果放入 Twig for 循环中。原理相同,但您可以在 PHP 端访问动态命名的方法。
  • 也许是属性函数?即attribute(article, value)twig.sensiolabs.org/doc/functions/attribute.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多