it-swarm.com.de

So erstellen Sie eine benutzerdefinierte Entität in Drupal 8

Ich habe ein großes persönliches Projekt, das auf Drupal 7 aufbaut und viele benutzerdefinierte Entitäten enthält. Ich möchte mit dem Upgrade des Projekts auf Drupal 8 beginnen, aber der vollständig neu geschriebene Drupal 8-Kern ist zu groß, als dass ich mich ohne Dokumentation zurechtfinden könnte (+ Symfony ist mir völlig unbekannt Ich bin nur ein einfacher Drupal-Typ.

Ich habe versucht, eine benutzerdefinierte Entität zu erstellen, indem ich nur einen Teil des Kernmodulcodes betrachtet habe, aber ohne Erfolg.

Können Sie mich auf einige Artikel über benutzerdefinierte Entitäten in Drupal 8 verweisen (ich konnte keine einzige finden) oder mir eine grundlegende Schritt-für-Schritt-Anleitung geben?

Vielen Dank.

10
user21641

Ich arbeite hier an der Entity API-Dokumentation: https://drupal.org/developing/api/entity .

Die Frage ist zu groß, um sie im Detail zu beantworten, und hängt davon ab, ob Sie Inhalte oder Konfigurationsentitäten benötigen. Angenommen, Sie möchten Inhaltsentitäten (in der Datenbank gespeichert, können vor Ort/überarbeitbar/... sein, Details im obigen Link), müssen Sie so etwas tun. Die oben verlinkte Dokumentation wird schließlich jeden Schritt, einschließlich Tutorials, jetzt abdecken Es werden nur die ersten Schritte behandelt.

  1. Geben Sie eine Entitätsklasse an und fügen Sie die erforderlichen Anmerkungen hinzu, um sie als Entität verfügbar zu machen.
  2. Wenn Sie die erforderlichen Tabellen bereitstellen, müssen Sie nicht viel ändern, wenn Sie bereits über Ihr 7.x-Schema verfügen. Sie möchten jedoch eine UUID- und möglicherweise eine Langcode-Spalte hinzufügen, wenn Ihre Entität eine Sprache haben kann/übersetzbar sein kann. Sehen Sie sich das in Schritt verknüpfte Knotenbeispiel an, wenn Sie einige Basisfelder (Eigenschaften) übersetzbar oder überarbeitbar machen möchten. Derzeit müssen Sie die erforderlichen Tabellen selbst bereitstellen.
  3. Geben Sie die Basisfelddefinitionen in Ihrer baseFieldDefinitions () -Methode an. . Beachten Sie, dass sich die Funktionsweise in https://drupal.org/node/2047229 (von Arrays zu Klassen) ändert.
  4. Implementieren Sie die erforderlichen Methoden vor/nach dem Speichern/Laden/Löschen, wenn Sie über eine benutzerdefinierte Logik verfügen, die z. vor dem Speichern einer Entität (wie das Aktualisieren des geänderten Zeitstempels).
  5. Implementieren Sie einen Zugriffscontroller, wenn Sie über eine nicht triviale Zugriffslogik verfügen und die Methoden checkAccess () und checkCreateAccess () überschreiben, oder geben Sie die admin_permission in Ihrer Anmerkung an, wenn Sie nur eine einzige Berechtigung haben, die den vollständigen Zugriff ermöglicht.
  6. Es wird empfohlen, obwohl technisch nicht erforderlich, eine Schnittstelle für Ihre Entitätsklasse (z. B. NodeInterface for Node) bereitzustellen, die nützliche Methoden (normalerweise get/set/isSomething ()) für Ihre Basisfelder enthält, damit Sie einen Hinweis auf die Schnittstelle und eingeben können Holen Sie sich die automatische Vervollständigung für diese Methoden.

Je nachdem, was Sie benötigen, gibt es auch weitere Schritte, z. B. das Definieren der erforderlichen Formulare, möglicherweise eines Render-Controllers usw. Diese sollten jedoch wahrscheinlich separate Fragen sein, wenn Sie weitere Informationen benötigen.

Anmerkungen:

  • Konfigurationsentitäten sind grundsätzlich ähnlich, außer dass Sie den Konfigurationsspeicher-Controller verwenden müssen ( https://drupal.org/node/2119905 erleichtert dies). Sie müssen keine Tabellenschemata definieren ( offensichtlich), aber Sie müssen eine Konfigurationsschemadatei bereitstellen, siehe z diejenigen für Taxonomie-Vokabulare oder Knotentypen.
  • Bei Inhaltsentitäten sind die Basisfelder nicht als öffentliche oder geschützte Eigenschaften definiert, sondern sie werden automatisch in den Eigenschaften für Werte und Felder verwaltet. Greifen Sie entweder über get ()/set () oder die entsprechenden magischen Methoden darauf zu. ($ node-> title ist gleich $ node-> get ('title')).
  • Hilfe bei der Dokumentation wäre dort sehr willkommen. Ich habe eine grundlegende Gliederung für den Inhalt/die Struktur erstellt, die ich haben möchte. Erstellen Sie also einfach eine neue Seite und beginnen Sie mit z. Ich bin auch an vereinfachten Tutorials für Konfigurationsentitäten interessiert. Es gibt hier bereits eine, die ich zur Entitätsdokumentation übergehen werde, wenn sie fertig ist: https://drupal.org/node/1809494
  • Core verfügt über eine große Anzahl von Implementierungen von Inhaltsentitäten. Wenn Sie Arbeitsbeispiele anzeigen möchten: Knoten, Benutzer, Begriff, Kommentar, CustomBlock, ... Wie in Artikel 1 erläutert, finden Sie immer die Entitätstypen von ein Modul im Entity-Namensraum.
  • @fago hat gerade ein Präsentation über Entity API im DrupalCamp Vienna an diesem Wochenende gegeben, deckt eine Menge von dem ab, was ich hier geschrieben habe und mehr.
13
Berdir