【问题标题】:Displaying an entity field type as table of some properties of each entity in Symfony2在 Symfony2 中将实体字段类型显示为每个实体的某些属性的表
【发布时间】:2015-02-12 22:40:01
【问题描述】:

我需要在两个实体之间建立单向的一对多关系。
为了让用户选择我使用实体字段类型的关系:

$builder->add('selectedItems','entity',array(
                'class'=>'MY\ExBundle\Entity\MyRow',
                'multiple'=>true,
                'expanded'=>true,
            )
        )

但有了这个,我只有一个 checkbox 及其每个实体的标签。
除了checkbox 之外,我还需要将每个实体显示为一个表行,其列是基础实体的一些属性(例如价格、计数等),以便用户可以查看有关实体的更多详细信息并在需要时检查它们.
例如:

+---+-------+--------+--------------+
|   | price |  count | deliveryDate |
+---+-------+--------+--------------+
| X |  100  |    6   | 2015-01-02   |
+---+-------+--------+--------------+
|   |   70  |    5   | 2015-02-03   |
+---+-------+--------+--------------+

我该怎么做?

我应该创建一个新的字段类型吗?如果是这样,我如何访问基础子实体?

或者我需要使用嵌入表单集合之类的东西?如果是这样,如何使 symfony 威胁它作为选择列表而不是新添加的条目。


编辑: 这是MY\ExBundle\Entity\MyRow 实体:

/**
 * MyRow
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="ITW\BidBundle\Entity\MyRowRepository")
 */
class MyRow
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var integer
     *
     * @ORM\Column(name="count", type="integer")
     */
    private $count;

    /**
     * @var integer
     *
     * @ORM\Column(name="price", type="integer")
     */
    private $price;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="deliveryDate", type="date")
     */
    private $deliveryDate;

    /**
     * @var string
     *
     * @ORM\Column(name="description", type="string", length=255,nullable=true)
     */
    private $description;

}

编辑2: 我试图为此创建一个字段类型,这是我用于它的模板:

{%- block tablechoice_widget -%}
    <table {{ block('widget_container_attributes') }}>
        <thead>
            <th></th>
            <th>price</th>
            <th>count</th>
        </thead>
        <tbody>
    {%- for child in form %}
        <tr>
            <td>{{- form_widget(child) -}}</td>
            <td></td>
            <td></td>
        </tr>
    {% endfor -%}
        </tbody>
    </table>
{%- endblock tablechoice_widget -%}

但我无法访问孩子 (checkboxes) 的底层实体 (MyRow)。

【问题讨论】:

  • 听起来这些实体是相关的,因为它们具有相同的字段名称。是否存在从中派生的基础实体?您可以使用基本实体来显示行并在表单中只使用 1 个实体吗?
  • 你想显示一些MY\ExBundle\Entity\MyRow属性,我理解正确吗?
  • @George:是的,实体来自同一个类,只有每一行都是该类的一个实例
  • @DonCallisto:请检查我对问题的编辑
  • 我还是不明白。 “姓名”和“家人”在哪里?他们来自什么实体?

标签: php symfony symfony-forms


【解决方案1】:

如果您使用该符号(例如)在 twig 中

{{ entity.child }} 

entity 是您表单的一个字段,您将无法访问实际的实体对象,而是访问它的表单表示(所以复选框或其他)

如果您想访问“真实”对象(及其子对象),您应该使用

{{ entity.vars.data }}

为了它的孩子

{{ entity.vars.getChild }}

当然,您必须根据实际代码调整名称。
祝你好运!

【讨论】:

  • 您能否详细说明childvars.data 的含义?或者在这个例子中它们到底是什么?
  • @masseleria child 就是与您的实体相关的任何东西。在这种情况下,实体是一个表单字段(参见问题)。 vars.data 实际的底层对象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多