Wenn ich ein Plugin mache, ist es nicht notwendig, von der Klasse zu erben, die ich überschreibe. Manchmal verwendet die von mir geänderte Methode jedoch Eigenschaften, die protected
Zugriff haben und von der Plugin-Klasse nicht verwendet werden können.
Aber wenn ich in der Plugin - Vererbung nach Modified Klasse deklarieren ist es möglich , dann Verwendung geschützte Eigenschaften. Ist es in Ordnung, es zu tun? Oder ist es besser, eigene __construct()
Klassen zu deklarieren und erforderliche Klassen zu injizieren (ich bin mir nicht sicher, ob sich die Zustände von Objekten, die im Plugin und in der geänderten Klasse verwendet werden, unterscheiden).
BEARBEITEN
Vielleicht war mir nicht klar genug - ich ändere die public
Methode mit (meistens für diese Frage) aroundMethod
und für verschiedene Fälle verwende proceed()
oder füge ich benutzerdefinierte Logik ein - und für diese benutzerdefinierte Logik muss ich protected
Eigenschaften der geänderten Klasse verwenden. Und die Frage ist - sollte ich Vererbung setzen, um es möglich zu machen
HINWEIS : Ich ändere keine protected
/ private
- benutze es einfach.
Antworten:
Ein Magento 2 Plugin ist:
Wenn Sie mit geschützten Methoden oder Eigenschaften arbeiten, können Sie keine Plugins verwenden. Es wird definitiv nicht empfohlen, Ihre Plugin-Klasse zu erweitern, um die ursprüngliche Klasse zu erweitern.
Die Liste der Einschränkungen für Plugins finden Sie in der offiziellen Dokumentation: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html
Dies hängt von Ihren Anforderungen ab. Wenn Sie jedoch geschützte Eigenschaften / Methoden ändern müssen, sollten Sie stattdessen Einstellungen verwenden.
Darüber hinaus können Sie Beobachter einsetzen, je nachdem, was Sie genau erreichen möchten.
IMHO, hier ist die Reihenfolge, in der Sie Ihre Art der Änderung von Kernklassen wählen sollten :
quelle
Das Plugin sollte keine geänderte Klasse erben.
Es wird auch nicht empfohlen, von nicht abstrakten Magento-Klassen zu erben.
quelle