In diesem Artikel wird die Entitätsvalidierungs-API von Drupal 8 und deren Abhängigkeit von der typisierten Daten-API für eine robuste Datenvalidierung untersucht und über die Grenzen des formbasierten Ansatzes von Drupal 7 hinausgeht. Wir werden untersuchen, wie dieses System die programmatische Datenbehandlung verbessert und die Konsistenz zwischen verschiedenen Datenzugriffsmethoden verbessert.
Schlüsselkonzepte:
FieldItemListInterface
Implementierungen, um Daten zu verwalten. Die Notwendigkeit eines besseren Ansatzes:
Drupal 7 stützte sich stark auf die Formular -API für die Validierung, die sich für die Validierung der programmatischen Entität erwies. Die Neuauflagen der Validierungslogik oder die Simulation von Formulareinreichungen waren ineffizient und haben die Dateninteraktion mit dem Formularsystem eng gekoppelt. Das Aufkommen von REST -APIs und anderen programmatischen Schnittstellen in Drupal 8 erforderte eine flexiblere Lösung. Drupal 8 übernahm die Symfony-Validierungskomponente und baute darauf auf, um in das System Typed Data und Plugin-basierte Entität zu integrieren. Dies gewährleistet eine konsistente Validierung über alle Interaktionsmethoden hinweg.
Dieser Artikel und seine Fortsetzung werden sich mit der praktischen Anwendung und Erweiterung der Drupal 8 -Entitätsvalidierungs -API befassen. Wir werden die zugrunde liegende typisierte Daten -API untersuchen und Codebeispiele angeben (verfügbar in einem Demo -Modul in diesem Git -Repository ).
Verständnis der typisierten Daten -API:
Die typisierte Daten -API bietet eine konsistente Schnittstelle für die Dateninteraktion. Seine Bedeutung liegt darin, Validierung auf typisierten Datenobjekten zu definieren und aufzurufen. Zu den Schlüsselkomponenten gehören:
Beispiel:
$definition = DataDefinition::create('string') ->addConstraint('Length', array('max' => 20)); $string_typed_data = \Drupal::typedDataManager()->create($definition, 'my string');
Dies erstellt eine String -Datendatendefinition mit einer maximalen Längenbeschränkung und verwendet dann die TypedDataManager
, um eine StringData
-Plugin -Instanz zu erstellen. Die validate()
-Methode in dieser Instanz löst die Validierung gegen definierte Einschränkungen aus und gibt eine ConstraintViolationList
.
Typisierte Daten- und Inhaltsentitäten:
Drupal 8 integriert Entitätseigenschaften und Feld -API -Felder. Während einige Felder Basisfelder (im Wesentlichen die Eigenschaften der alten Entität) sind, sind andere konfigurierbar. Jedes Feld verwendet eine FieldItemListInterface
-implementierung, um Daten zu verwalten, wobei in der Regel FieldItem
-Pugins enthalten sind, jeweils ein Datentyp -Plugin erweitert und eine DataDefinitionInterface
-implementierung verwendet (häufig FieldItemDataDefinition
).
Hinzufügen von Einschränkungen:
Einschränkungen sind Plugins, die Validierungsdetails, Fehlermeldungen und Validatoroptionen enthalten. Die Validator -Klasse führt die tatsächliche Validierung durch.
Einschränkungen auf Entitätsebene: Hinzufügen über Annotationen in der Entitätsklasse. Beispiel:
constraints = { "CommentName" = {} }
Um Entitätsbeschränkungen zu ändern, verwenden Sie hook_entity_type_alter()
:
function demo_entity_type_alter(array &$entity_types) { $node = $entity_types['node']; $node->addConstraint('ConstraintPluginName', ['array', 'of', 'options']); }
Einschränkungen auf Feldebene: Methoden hängen davon ab, ob der Entitätstyp benutzerdefiniert oder kern ist und ob das Feld basisch oder konfigurierbar ist. Fügen Sie für benutzerdefinierte Entitätstypen Einschränkungen in baseFieldDefinitions()
hinzu. Verwenden Sie für vorhandene Entitätstypen hook_entity_base_field_info_alter()
für Basisfelder und hook_entity_bundle_field_info_alter()
für konfigurierbare Felder. Beispiel für ein Basisfeld:
function demo_entity_base_field_info_alter(&$fields, EntityTypeInterface $entity_type) { if ($entity_type->id() === 'node') { $title = $fields['title']; $title->addPropertyConstraints('value', ['Length' => ['max' => 5]]); } }
Schlussfolgerung und nächste Schritte:
Dieser Artikel enthält ein grundlegendes Verständnis der Entitätsvalidierung von Drupal 8 und der typisierten Daten -APIs. Der nächste Teil wird sich in den Validierungsprozess selbst befassen, Verstöße bearbeiten und benutzerdefinierte Einschränkungen und Validatoren erstellen.
(Der vorgesehene FAQS -Abschnitt wird hier aufgrund von Längenbeschränkungen weggelassen, kann jedoch als separater Abschnitt integriert werden.)
Das obige ist der detaillierte Inhalt vonDrupal 8 Entitätsvalidierung und typisierte Daten erläutert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!