Symfony2:具有两个id属性的表单元素

时间:2016-04-18 14:24:56

标签: php forms symfony twig entity

我正在尝试使用Symfony2 / Twig构建一个嵌入式表单,其中我想在表单上显示每行的映射实体的id。
我这样做了:

{% for p in form.products %}
    <tr>
        <td>{{p.vars.data.id}}</td>
    </tr>
{% endfor %}

这很简单......但没有打印出来。 我尝试了以下方法:

{% for p in form.products %}
    <tr>
        <td>{{dump(p.vars)}</td>
    </tr>
{% endfor %}

结果出人意料:

array:27 [▼   "value" => ItemProduct {#857 ▼
    -id: null
    #enabled: false
    #commission: 0.0
    #support: 1
    -quantity: 0
    -id: 1   }

元素的两个id属性。我不知道它甚至是可能的,我不明白这是怎么发生的,我的代码非常简单,我甚至在使用更复杂的嵌入式表格之前从未遇到过这样的问题。

以下是我的其余代码:

ItemProductType

class ItemProductType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder -> add ( 'artist_commission' , 'text' );
    }
    // ...
}

ItemProductsType

class ItemProductsType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('products', 'collection', array('type' => new ItemProductType()));
}

ItemProduct

/**
 * @ORM\Table(name="item_products")
 * @ORM\Entity(repositoryClass="APIBundle\Entity\ItemProductRepository")
 */
class ItemProduct extends Product
{
    /**
     * @var integer
     *
     * @ORM\Id()
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(type="boolean")
     */
    protected $enabled;

    /**
     * @ORM\Column(type="float")
     */
    protected $commission;

    /**
     * @ORM\Column(type="integer")
     */
    protected $support;
}

1 个答案:

答案 0 :(得分:0)

我想我终于找到了什么问题(写这个问题可能让我对我的代码有了新的看法。)

我的ItemProduct继承了Product类,该类具有自己的id属性。由于有两个不同的表,id属性未正确合并,Symfony使两个不同的id属性可见。
由于其中只有一个实际上与数据相关联,另一个是空的。

即使问题得到解决并且我的代码中出现了更大的问题,我仍然对这种行为的解释感兴趣,以及如何使实体中同名的属性共存。