Plugins - ist es eine schlechte Angewohnheit, von einer geänderten Klasse zu erben, um geschützte Eigenschaften zu verwenden

8

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 protectedZugriff 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 publicMethode mit (meistens für diese Frage) aroundMethodund für verschiedene Fälle verwende proceed()oder füge ich benutzerdefinierte Logik ein - und für diese benutzerdefinierte Logik muss ich protectedEigenschaften 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.

Bartosz Kubicki
quelle
Code zeigen?
belfort1
Ich habe das gleiche Problem wie du. magento.stackexchange.com/questions/154443/…
LM_Fielding

Antworten:

6

Ein Magento 2 Plugin ist:

Wird verwendet, um das Verhalten einer öffentlichen Methode zu erweitern oder zu ändern, indem Code vor, nach oder um diese beobachtete Methode angewendet wird.

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 :

  1. Plugins
  2. Wenn Sie keine Plugins verwenden können, Beobachter
  3. Wenn Sie keine Plugins oder Beobachter verwenden können, verwenden Sie die Einstellungen
Raphael beim digitalen Pianismus
quelle
Werfen Sie einen Blick auf bearbeiten
Bartosz Kubicki
6

Das Plugin sollte keine geänderte Klasse erben.

Es wird auch nicht empfohlen, von nicht abstrakten Magento-Klassen zu erben.

Anton Kril
quelle