2012-03-30 9 views
1

Ich habe ein Problem bei der Verwendung von Formularen in Symfony 2 mit mongoDB-Dokumenten.Symfony2 mongodb Bundle Dokument Eins-zu-viele-Formulare

Ich versuche, eine Form zu haben, die mein erstes Dokument (Post) mit einer Beziehung OneToMany zu Schlagworte (Referenz)

Die Beziehung wie folgt erklärt wird vertreten:

/** 
* @Assert\Collection 
* @MongoDB\ReferenceMany(targetDocument="Acme\ManagerBundle\Document\Tags") 
*/ 
protected $tags; 

Ein Tag hat eine ID und einen Namen.

Ich habe eine Menge Dinge versucht, es

$form = $this->createFormBuilder($tag)->add('tags', 'choice', array('choices' => $tags, 'multiple' => true, 'expanded' => true, 'empty_value' => true, )) 

Die Form der Auswahl zeigen arbeiten zu lassen, aber sobald seine submited das Formular nicht gültig ist, und halten thhis Fehler zeigt:

„Die Felder "0", "1", "2" wurden „

nicht erwartet

ich auch diese versucht habe: symfony2 form choice and mongodb

Aber die Verwendung von es irgendwie ist

verwirrend

UPDATE

Das ist, was ich erhalten, nachdem die Post übergeben wird:

object(Doctrine\Common\Collections\ArrayCollection)#795 (1) { 
    ["_elements":"Doctrine\Common\Collections\ArrayCollection":private]=> 
    array(2) { 
    [0]=> 
    object(Acme\ManagerBundle\Document\Tags)#723 (2) { 
     ["id":protected]=> 
     string(24) "4f7a0eb1ecd111b99c3d2f25" 
     ["name":protected]=> 
     string(6) "Fruits" 
    } 
    [1]=> 
    object(Acme\ManagerBundle\Document\Tags)#720 (2) { 
     ["id":protected]=> 
     string(24) "4f7a0ec7ecd111b99c3d2f26" 
     ["name":protected]=> 
     string(10) "Vegetables" 
    } 
    } 
} 

i So, jetzt verstehen, warum ich "Die Felder" haben 0 "," 1 "," 2 "wurden nicht erwartet" aber ich verstehe nicht, warum Symfony es nicht verarbeitet.

Ich habe mir eine mögliche Bündel aber nichts

ich keine Ahnung, wie man eine schöne Form haben, die meine Aufgabe und die damit verbundenen Objekte Hydrat wird, wird jemand eine Lösung für dieses Problem hat oder andere Idee, das zu lösen?

Vielen Dank!

+0

Was haben Sie von dieser Frage aus versucht? Die Antwort besagt, DoctrineMongoDBBundle zu installieren und "Dokument" anstelle von "Entität" zu verwenden. – meze

+0

Ich habe versucht "Wahl" und "Sammlung", DoctrineMongoDBBundle ist natürlich bereits installiert und ich habe 'Dokument' anstelle von 'Einheit', aber immer noch das gleiche Problem. –

Antwort

0

Ohne die Daten zu sehen, kann ich nur eine beste Schätzung hier machen.

Es fühlt sich an, als ob Ihre Codezeile ungefähr so ​​aussehen sollte.

Jetzt denke ich, was passiert ist, erhalten Sie Ihre $ Tags Daten in einer Form wie folgt.

array(0 => (Object)Tag, 1 => (Object)Tag, 2 => (Object)Tag) 

Wo, was Sie wirklich wollen, ist wahrscheinlich so.

array('topic1' => 'Topic 1', 'topic2' => 'Topic 2', 'topic3' => 'Topic 3') 

Wenn Sie dies nicht der Fall ist, mit einiger Datenausgabe antworten und ich bin sicher, dass wir in der Lage sein werden etwas mehr zu helfen.

+0

Hallo Jamie und danke, ich habe gerade mit diesem Array versucht, das du als Testarray angegeben hast ('topic1' => 'Topic 1', etc) und nun lautet der Fehler: "Die Felder" 0 "wurden nicht erwartet" –

+0

Anybody eine Idee? ich bin immer noch mit dieser die Felder „0“ erwartet wurden, nicht stecken Und ich weiß wirklich nicht, wie es zu lösen! Dank –

+0

bei Ihrem Update Blick. die Daten in der falschen Format noch. Ich werde meinen Beitrag aktualisieren, wie ich denke, dass Ihre Daten aussehen sollten, damit es funktioniert. Ich werde darauf hinweisen, dass ich Symfony nicht verwende, also bin ich kein Experte hier. Ich gehe nur, was Dokumentation sagt hier http://symfony.com/doc/current/reference/forms/types/choice.html –

0

Ein choice Feld wird nicht standardmäßig gespeichert (obwohl Sie dies manuell beim Senden des Formulars tun könnten). Sie müssen in den document Typ schauen, der zugegebenermaßen nicht gut dokumentiert ist, aber es ist im Wesentlichen der gleiche Typ wie entityhere.

Ich habe nicht gesehen, das war vor 3 Jahren! Nun, es ist für den Fall, dass andere diese Seite finden, denke ich.