Dies liegt daran, dass Sie sie beliebig verketten können. Wenn Sie einen benutzerdefinierten Formulartyp erstellen, der alle Felder enthält, die Sie auf einer bestimmten Seite anzeigen möchten (wie für jedes Formular, das ich erstelle), können Sie dieses Formular in anderen Formularen wiederverwenden.
Ein Beispiel könnte sein, dass Sie einen Formulartyp für Adressen haben. In der Adressansicht verwenden Sie nur das Adressformular zum Bearbeiten von Adressen. Aber jetzt denken Sie, Sie haben eine Seite, um einen neuen Kunden zu erstellen. Die Kundeneinheit hat beispielsweise eine Beziehung zu einer Adresse. Anstatt die notwendigen Felder in diesem Formulartyp noch einmal zu wiederholen, können Sie einfach ein einzelnes Feld namens Adresse mit dem Typ Ihres bereits definierten Adresstyps angeben. Jetzt wird das Adressformular direkt an dieser Position eingebettet und stellt auch sicher, dass ein Objekt des richtigen Typs erstellt wird, um dies später auf der Entitätseigenschaft der Benutzeradresse festzulegen, wenn Sie die Anforderung an das Formular binden.
Nun zurück zur ursprünglichen Frage: Wenn Sie dieses Konzept der Verkettung von Formen verstehen, können wir uns den DateType ansehen. Der DateType kann als einzelnes HTML5-Eingabefeld konfiguriert werden oder als drei separate Auswahlfelder (eines für Jahr, Monat und Datum) angezeigt werden. Das Konzept ist genau dasselbe. Der DateType definiert Felder jeweils als ChoiceType. Darüber hinaus definiert der DateType Konverter, die ausgelöst werden, wenn Daten an das Formular gebunden werden, um sicherzustellen, dass das PHPTimeTime-Objekt korrekt in diese drei separaten Werte konvertiert wird und umgekehrt.
Wir können uns auch vorstellen, eine Ebene höher zu gehen und sich einen DateTimeType vorzustellen. Das Erstellen eines solchen Typs ist ziemlich einfach, wenn Sie bereits einen DateType und einen TimeType zur Hand haben. Sie müssen nur zwei Felder definieren, die diese Typen wiederverwenden und etwas konvertieren.
Für den ChoceType haben wir auch das Beispiel, dass es intern einen RadioType und CheckboxType und SelectType verwendet, um verschiedene Varianten von Auswahlformen anzuzeigen.
So wie Sie sehen, ist der Unterschied zwischen dem, was wir einen vollständigen Formteil nennen würden, und einem einzelnen Feld sehr marginal und theoretisch. Deshalb macht Symfony hier keinen Unterschied.
Einige weitere Links zur Dokumentation: Erstellen eines benutzerdefinierten Formularfeldtyps
Tags und Links symfony symfony-forms