2017-11-01 2 views
0

Ich habe eine Entität - 'Haus' Ich möchte in einer symfony Form bearbeiten. Eine der Eigenschaften der Entität ist eine andere Entität "Eigentümer", die in einer Viele-zu-Viele-Beziehung abgebildet ist.Wie man Entitätseigenschaft in Symfony Formular abbildet

Wenn ich die Hauseinheit erstelle, weiß ich, wem sie gehört, und das kann nicht geändert werden, also muss ich den Besitzer im Formular übergeben, aber nicht in einer Weise, die bearbeitet werden kann.

Wenn ich Symfony nicht verwendet habe, würde ich es einfach als verstecktes Feld "OwnerID" übergeben. In Symfony weiß ich, dass ich es als Entity-Typ übergeben kann, aber das ist ein Auswahlfeld, sichtbar und erlaubt dem Besitzer, geändert zu werden.

Also wie sollte ich es in Symfony übergeben?

Einfach das Formular als 'Besitzer' hinzufügen, gibt mir ein Array zu String-Konvertierung Fehler.

Antwort

0

Um zu vermeiden, dass der Array-String-Konvertierungsfehler auftritt, sollten Sie eine __toString()-Funktion erstellen, um den OwnerId-Wert zu drucken.

Sobald Sie dort sind, können Sie die Eigenschaft deaktivieren, um das Besitzer-Feld wie in diesem doc , um dies zu tun, müssen Sie Standardwerte setzen oder fügen Sie einige Logik auf Senden Aktionen.

Hoffe es funktioniert!

+0

Das eigentliche Problem war es stellte sich heraus, dass ich den Besitzer Eigentum bevölkert ich die findBy() functiod verwendet und der Wert der Eigenschaft zurückgegeben zugeordnet. Die Funktion gibt jedoch ein Array von Objekten zurück, daher der Konvertierungsfehler von Array zu String. Die Verwendung von findOneBy() hat eine Besitzerklasse zurückgegeben, die dann die Funktion __toString() erfolgreich aufgerufen hat ... leider hatte die Persistenz am anderen Ende keine Ganzzahl und keine Klasse. Damit wurde das Problem gelöst, das ich hatte, aber das eigentliche Problem, das ich beheben wollte. – Horaland

0

Sie die Option verwenden:

"disabled" => true

Dokumentation: Wenn Sie den Wert eines Feldes ändern, keinen Benutzer möchten, können Sie einstellen, die deaktivierte Option zu true. Jeder übermittelte Wert wird ignoriert.

Official documentation

+0

"Jeder übermittelte Wert wird ignoriert" ist ein merkwürdiger. Normalerweise würde der Wert nicht mit dem Formular gepostet werden, also würde es nicht funktionieren, um den Besitzer über das Formular zu übergeben, aber es funktioniert nicht. Aber aus irgendeinem Grund in Symfony. – Horaland