{"id":8710,"date":"2021-11-25T14:37:46","date_gmt":"2021-11-25T14:37:46","guid":{"rendered":"https:\/\/www.bay20.com\/?p=8710"},"modified":"2025-05-21T15:19:16","modified_gmt":"2025-05-21T09:34:16","slug":"wie-uberschreibe-klassen-in-magento-2","status":"publish","type":"post","link":"https:\/\/www.bay20.com\/de\/wie-uberschreibe-klassen-in-magento-2\/","title":{"rendered":"Wie \u00fcberschreibt man Klassen in Magento 2?"},"content":{"rendered":"\n<p>Es gibt viele M\u00f6glichkeiten, Methoden und Klassen au\u00dfer Kraft zu setzen. In den meisten Situationen ist die Verwendung einer Klasse vorzuziehen. Das Neuschreiben einer neuen Klasse kann zu Konflikten f\u00fchren. Hierf\u00fcr werden Plugins eingef\u00fchrt. Alle Klassen werden durch ihre Schnittstellen definiert und durch di.xml-Dateien konfiguriert. Es gibt eine Abstraktions-Implementierungs-Zuordnung, die implementiert wird, wenn die Konstruktorsignatur einer Klasse ein Objekt \u00fcber seine Schnittstelle anfordert. Das bedeutet, dass Schnittstellen verwendet werden sollten, wenn sie verf\u00fcgbar sind, und dass die Abbildung angibt, welche Klasse initiiert werden sollte.<\/p>\n\n\n\n<p>Nachstehend k\u00f6nnen die Pfade f\u00fcr die di.xml-Dateien innerhalb von VendorName\/ModuleName angegeben werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/etc\/di.xml\n\/etc\/&lt;area&gt;\/di.xml<\/code><\/pre>\n\n\n\n<p><strong>Plugins:<\/strong><\/p>\n\n\n\n<p>Plugins k\u00f6nnen in dieser di.xml konfiguriert werden und sie werden vor, nach und um die Methoden herum aufgerufen, die unten als Beispiel f\u00fcr den Code der di.xml-Datei aufgef\u00fchrt sind<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;config&gt;\n    &lt;type name=\"Magento\\Catalog\\Api\\Data\\ProductInterface\"&gt;\n        &lt;plugin name=\"bay20_test_catalog_product\" type=\"Bay20\\Test\\Plugin\\Model\\Product\" \/&gt;\n    &lt;\/type&gt;\n&lt;\/config&gt;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Vorher Methode<\/strong><\/li><\/ul>\n\n\n\n<p>Vor dem Ausf\u00fchren des Plugins ordnungsgem\u00e4\u00df auf eine beobachtete Methode und hat die gleiche Anzahl von ge\u00e4nderten Argumente in einem Array zur\u00fcck. Wenn die Methode das Argument f\u00fcr die beobachtete Methode nicht \u00e4ndert, sollte sie einen Nullwert zur\u00fcckgeben.<br><br>Nachfolgend ein Beispiel f\u00fcr eine \u201ebefore\u201c-Methode, die das Argument $price \u00e4ndert, bevor sie es an die beobachtete \u201esetPrice\u201c-Methode weitergibt.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nnamespace Bay20\\Test\\Plugin\\Model;\n \nclass Product\n{\n    public function beforeSetPrice(\\Magento\\Catalog\\Model\\Product $subject, $price)\n    {\n        $price += 10;\n        return &#91;$price];\n    }\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Nach der Methode<\/strong><\/li><\/ul>\n\n\n\n<p>Nachdem die Methode ausgef\u00fchrt wurde, wird nur noch die urspr\u00fcngliche Methode aufgerufen. Neben einem Klassenobjekt akzeptiert die Methode ein weiteres Argument und das ist das Ergebnis, das auch zur\u00fcckgegeben werden muss. Die Methode, die erweitert wird, muss den gleichen Namen mit dem Pr\u00e4fix \u201eafter\u201c haben.<\/p>\n\n\n\n<p>Nachfolgend ein Beispiel f\u00fcr eine After-Methode, die den R\u00fcckgabewert $result eines beobachteten Methodenaufrufs \u00e4ndert.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nnamespace Bay20\\Test\\Plugin\\Model;\n \nclass Product\n{\n    public function afterGetName(\\Magento\\Catalog\\Model\\Product $subject, $result)\n    {\n        $result .= ' Suffix';\n        return $result;\n    }\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Rund um die Methode<\/strong><\/li><\/ul>\n\n\n\n<p>Wenn Sie eine Methode aufrufen, wird die urspr\u00fcngliche Methode umschlossen und erm\u00f6glicht die Ausf\u00fchrung von Code vor und nach dem Aufruf der urspr\u00fcnglichen Methode. Neben einem Klassenobjekt ist die Methode, die ein weiteres Argument akzeptiert, aufrufbar, so dass andere Plugins sie in der Kette aufrufen k\u00f6nnen. Die Methode, die erweitert wird, muss den gleichen Namen mit dem Pr\u00e4fix \u201earound\u201c haben.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nnamespace Bay20\\Test\\Plugin\\Model;\n \nclass Product\n{\n    public function aroundSave(\\Magento\\Catalog\\Model\\Product $subject, \\callable $proceed)\n    {\n        \/\/ before save\n        $result = $proceed();\n        \/\/ after save\n \n        return $result;\n    }\n}<\/code><\/pre>\n\n\n\n<p><strong>Schlussfolgerung:<\/strong><\/p>\n\n\n\n<p>Es gibt mehr als eine M\u00f6glichkeit, Klassen und Methoden zu \u00fcberschreiben, und die Wahl der richtigen Methode h\u00e4ngt von der jeweiligen Situation ab. Die Verwendung einer Klassenpr\u00e4ferenz als \u00dcberschreibungsmethode mag zwar der einfachste Weg sein, der in den meisten Situationen funktioniert, ist aber die Ursache vieler Konflikte, wenn verschiedene Module versuchen, dieselben Klassen und dieselben Methoden zu \u00fcberschreiben.<\/p>\n\n\n\n<p><strong>Bitte kontaktieren Sie uns unter <strong><a href=\"mailto:manish@bay20.com\">manish@bay20.com<\/a><\/strong> oder rufen Sie uns unter <strong><a href=\"https:\/\/api.whatsapp.com\/send?phone=+918800519180&amp;text=Hi, I contacted you through your website.\" target=\"_blank\" rel=\"noreferrer noopener\">+91-8800519180<\/a><\/strong><\/strong> <strong>an, wenn Sie Unterst\u00fctzung f\u00fcr Magento 2 ben\u00f6tigen. Sie k\u00f6nnen auch die <strong><a href=\"https:\/\/www.bay20.com\/de\/magento-entwicklungsunternehmen\/\" title=\"\">Magento2<strong>-Entwicklungsseite<\/strong><\/a><\/strong> besuchen, um die von uns angebotenen Dienstleistungen zu \u00fcberpr\u00fcfen.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>There are many ways to override methods and classes. In most situations, using a class is more preferable. Rewriting a new class can create conflict. For this, plugins are introduced. All the classes are defined by their interfaces and configured by di.xml files.<\/p>\n","protected":false},"author":83,"featured_media":9470,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[88,77,79],"tags":[],"class_list":["post-8710","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-entwicklung","category-magento2","category-magento-anleitung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/posts\/8710","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/users\/83"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/comments?post=8710"}],"version-history":[{"count":11,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/posts\/8710\/revisions"}],"predecessor-version":[{"id":17243,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/posts\/8710\/revisions\/17243"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/media\/9470"}],"wp:attachment":[{"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/media?parent=8710"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/categories?post=8710"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/tags?post=8710"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}