it-swarm.com.de

Was ist der beste Weg, um \ Drupal \ node \ Entity \ Node zu erweitern?

Wenn wir uns mit Knoten auf Drupal 8) befassen, erhalten wir normalerweise eine Instanz von\Drupal\node\Entity\Node, die in vielerlei Hinsicht großartig ist, aber ich bin nicht sicher, wie ich sie erweitern soll Damit ich Klassen verwenden kann, die etwas in meiner eigenen Domäne darstellen, anstatt generisch Node zu verwenden. Ich kann dies hier machen:

class Video extends \Drupal\node\Entity\Node {}

OK. Aber um Video :: load () und solche Dinge zu haben, sehe ich, dass ich wahrscheinlich auch NodeStorage erweitern muss, da alles eine Node Klassen- und Typänderung zurückgibt, scheint dies nicht zu sein so einfach in PHP von dem, was ich bis jetzt sehe. Ich bin mir nicht sicher, ob dies wirklich der richtige Weg ist.

Ich arbeite sehr gerne daran, Node zu erweitern (ich habe EntityDrupalWrapper auf D7 erweitert), da es für Neulinge im Projekt einfacher wird und Dinge wie $ Video-> getFileUrl () zu haben.

Irgendwelche Ideen?

4
pedrorocha

Es ist schon eine Weile her, seit Benjamin und ich uns das ausgedacht haben https://www.drupal.org/project/agcobca also bin ich nicht 100% es läuft immer noch, aber es sollte ziemlich nah an dem sein, was du willst/brauchen.

1
user49

Sie sollten nicht Node, sondern\Drupal\Core\Entity\ContentEntityBase oder\Drupal\Core\Config\Entity\ConfigEntityBase) erweitern.

1
user21641

Das kannst du nicht machen. Alle Entitäten desselben Typs haben dieselbe Klasse.

Ich glaube, es gibt einige Probleme, die dies ermöglichen, möglicherweise durch eine Klassenzuordnung pro Bundle anstelle eines einzelnen Klasseneintrags, aber es wäre im Moment ziemlich kompliziert, da es verschiedene Stellen gibt, an denen Entitätsklassen instanziiert werden und dies erforderlich wäre Überschreiben Sie sie alle (z. B. erstellen und laden).

1
Berdir

Ich habe ein Modul erstellt, das in der Lage ist, Drupal-Entitäten (einschließlich Knoten pro Typ) über das Plugin-System zu überschreiben. Beispiele und die Modulseite Entity Type Class finden Sie auf der Modulseite Download-Link natürlich.

0
mvdgun

Die empfohlene Lösung besteht darin, ContentEntityBase zu erweitern. Dies ist eine mühsame Aufgabe, wenn Sie sie manuell ausführen möchten, oder eine schnelle, wenn Sie Drupal-Konsole verwenden, und es ist generate:entity:content Befehl.

Jedoch

Es ist immer noch möglich, die Klasse Node) zu erweitern, und meine Experimente haben bisher bewiesen, dass es gut funktioniert. Der wichtige Teil ist, dass nach dem Erweitern von Drupal\node\Entity\Node Sie müssen auch drupal, um Ihre Klasse zu verwenden, indem Sie hook_entity_type_build implementieren.

Sie können meine ausführliche Antwort auf Wie ändere ich die Entitätstypklasse in der Frage Drupal 8? sehen, die erklärt, wie das geht und warum es funktioniert.

0
SiliconMind