2016-04-18 6 views
1

Ich habe versucht, ein eingebettetes Formular mit Symfony2/Twig zu erstellen, in dem ich die ID der zugeordneten Entität für jede Zeile auf dem Formular anzeigen wollte.
ich tat dies:Symfony2: Formularelement mit zwei ID-Attributen

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

, die sehr einfach ist ... aber nichts gedruckt wurde. Ich habe versucht, die folgenden:

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

Und das Ergebnis war unerwartet:

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

Zwei id Attribute für das Element. Ich wusste nicht, dass es überhaupt möglich war, und ich verstehe nicht, wie das passieren kann. Mein Code ist extrem einfach und ich habe solche Probleme nie zuvor mit viel komplexeren eingebetteten Formen erlebt.

Hier ist der Rest meines Code:

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

Antwort

0

Ich glaube, ich endlich gefunden habe, was falsch war (das Schreiben der Frage hat wahrscheinlich dazu geführt, dass ich einen neuen Blick auf meinen Code geworfen habe).

Meine ItemProduct erbt eine Klasse, die ihr eigenes id Attribut besitzt. Da es zwei verschiedene Tabellen gibt und das id Attribut nicht ordnungsgemäß zusammengeführt wird, macht Symfony die zwei verschiedenen id Attribute sichtbar.
Da nur einer von ihnen tatsächlich mit den Daten verknüpft war, war der andere Null.

Auch wenn das Problem gelöst ist und größere Probleme in meinem Code aufgedeckt werden, bin ich immer noch interessiert an Erklärungen zu diesem Verhalten und wie es möglich ist, Attribute mit demselben Namen in einer Entität koexistieren zu lassen.

+1

Sie können Ihre eigene Antwort akzeptieren, dies markiert diese Frage als gelöst: http://StackOverflow.com/Help/self-answer –

Verwandte Themen