Es scheint mir logisch, dass ein Feld-Widget ein Formularelement sein kann, das auch direkt einem zugrunde liegenden Speicher zugeordnet wird
Widgets sind Formularelemente. Sie haben nur zusätzliche Funktionen, die ein Formularelement nicht hat. In der Dokumentation zur Feld-Widget-API werden die Widgets mit den folgenden Worten beschrieben:
Widgets sind Formular-API- Elemente mit zusätzlichen Verarbeitungsfunktionen. Widget-Hooks werden normalerweise von der Field Attach-API beim Erstellen der Feldformularstruktur mit field_attach_form () aufgerufen .
Jedes Widget wird mit mindestens einem Formularelement implementiert. Ein Modul, das Widgets implementiert, muss jedoch einige Hooks implementieren, die für ein Formularelement nicht erforderlich sind:
Während der erste als das Äquivalent von hook_element_info () angesehen werden kann , sind die anderen beiden zusätzliche Hooks, die für die Arbeit der Widgets erforderlich sind. Dank der übergebenen Informationen wird hook_field_widget_form()
ein Widget gerendert.
Drupal hätte Widgets implementieren können, die die zurückgegebenen Eigenschaften erweitern hook_element_info()
, aber die Wahrheit ist, dass ein Widget und ein Formularelement zwei verschiedene Dinge sind, die in verschiedenen Fällen verwendet werden. Betrachten Sie ein Widget als einen spezielleren Typ eines Formularelements.
Wenn hook_element_info()
auch Informationen zu Widgets zurückgegeben würden, müsste der Code, der nach Widgets sucht, die Formularelemente herausfiltern, um die Widget-Informationen beizubehalten. Umgekehrt sollte der Code, der nach Formularelementen sucht, die Widget-Informationen herausfiltern. In Anbetracht dessen, wie oft diese Informationen benötigt werden, sind zwei verschiedene Hooks erforderlich.
Drupal hätte eine "Basiselement" -Eigenschaft verwenden können, die von zurückgegeben wurde hook_field_widget_info()
. Wenn eine solche Eigenschaft nicht implementiert wurde, bedeutet dies, dass niemand sie vorgeschlagen hat oder vorgeschlagen wurde, aber sie hat sich in einigen wenigen Fällen als nützlich erwiesen.
Bei Drupal 8 haben sich die Dinge ein wenig geändert, und Formularelemente sind Objekte der implementierenden Klassen FormElementInterface
, während Feld-Widgets Objekte der implementierenden Klassen sind WidgetInterface
. Die Schnittstelle, die diesen Schnittstellen gemeinsam ist PluginInspectionInterface
, definiert keine Methode zum Rendern eines Formularelements, das stattdessen aus RenderElement
einer abstrakten Klasse definiert wird.
Da Widgets jetzt mit Klassen implementiert werden, ist das Basis-Widget im Wesentlichen die Basisklasse, von der eine Widget-Klasse abgeleitet wird. Es ist keine Eigenschaft erforderlich, um das Basis-Widget eines Widgets zu definieren.