2016-04-18 18 views
1

私は、フォームの各行にマッピングされたエンティティのIDを表示したいと思っていたSymfony2/Twigで埋め込みフォームを作成しようとしていました。
私はこれをやっていた:Symfony2:2つの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 %} 

、結果は予想外であった:: は、私は次のことを試してみました要素の属性id

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

つ。私はそれが可能であったことを知らなかったし、これがどうして起こるかも理解していない。私のコードは非常に単純で、はるかに複雑な埋め込みフォームでもこのような問題に遭遇したことはなかった。ここで

は私のコードの残りの部分である:

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; 
} 

答えて

0

私は私が間違っていたものを最終的に見つけたと思います(おそらく質問を書いて私のコードに新しい印象を与えました)。

私のItemProductは、それ自身のid属性を持つProductクラスを継承しています。 2つの異なる表があり、id属性が適切にマージされないため、Symfonyは2つの異なるid属性を表示します。
これらのうちの1つだけが実際にデータにリンクされていたため、もう1つはnullでした。

私のコードで問題が解決され、より大きな問題が明らかになったとしても、私はこの動作についての説明に興味があり、同じ名前の属性をエンティティに共存させることは可能です。

+1

あなた自身の答えを受け入れることができます。これは解決されたこの問題をマークします:http://stackoverflow.com/help/self-answer –