【问题标题】:Symfony3/Twig templating: database object to tableSymfony3/Twig 模板:数据库对象到表
【发布时间】:2016-07-11 09:36:43
【问题描述】:

我只是在学习 Symfony3 和 Twig。不确定我做错了什么,但我有一个数据库表 product,其中包含 'name'、'price' 和 'description' 行。我想简单地将 DB 表转储到 HTML 表中。我做了如下:

树枝:

<table>
    {% for product in products %}
        <tr>
            {% for key,value in product %}
                <td>{{ value }}</td>
            {% endfor %}
        </tr>
    {% endfor %}
</table>

如果我在第一个 for 循环的开头转储 product,我会得到以下结果:

Product {#330 ▼
  -id: 1
  -name: "Keyboard"
  -price: "19.99"
  -description: "Ergonomic and stylish!"
}

但是,keyvalue 都是空的。

【问题讨论】:

  • 您正在尝试迭代对象属性,这在默认情况下是不可能的。您需要先将对象转换为数组
  • 您似乎是对的,但对于一个让事情变得更简单的系统来说,这似乎也不必要地费力。
  • 恕我直言,你不应该循环它的属性。你应该做这样的事情:{% for product in products %}&lt;h1&gt;{{ product.getName() }}&lt;/h1&gt;&lt;p&gt;{{ product.getDescription() }}&lt;span class="price"&gt;${{ product.getPrice() }}&lt;/p&gt;

标签: php mysql twig symfony


【解决方案1】:

你应该使用这样的东西:

<table>
    <tr>
        <th>Name</th> <th>Price</th> <th>Description</th>
    </tr>
    {% for product in products %}
        <tr>
            <td>{{ product.getName }}</td>
            <td>{{ product.getPrice }}</td>
            <td>{{ product.getDescription }}</td>
        </tr>
    {% endfor %}
</table>

代码取决于你的 getter。

【讨论】:

  • 或者,更简洁地说,您可以使用 product.nameproduct.price 等。只要按照典型约定命名,Twig 就会自动检测并使用您的 getter。
  • 嗯,是的,我想我提出的问题有点不准确。我假设我不知道你在这个对象中有名称、价格和描述,我想简单地输出我得到的任何对象的 key > value,即复制 MySQL DB 中的表。
  • dump 显示结果中的内容。你试过我的解决方案吗? @SamDufel 也是正确的,您可以使用方法二;但是,根据您的设计,它可能并不总是有效。
  • 嗨,是的,这些工作。但这假设我知道对象中有哪些元素。如果我不这样做怎么办?就像您从数据库表中选择每一列并显示表中的内容一样。我想这不是我们现在应该做的,因为有物体之类的。
  • 你看错了——当你使用像 Doctrine 这样的 ORM 时,你的实体类就是你的数据结构的定义。不要考虑列名;这些将为您映射到对象中的字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 2015-11-10
  • 2012-12-21
  • 2012-01-09
  • 1970-01-01
  • 2020-03-03
相关资源
最近更新 更多