Magento 2 - In welchem ​​Fall verwende ich di.xml und wie verwende ich di.xml für Module?

12

In Magento 2: Welchen Fall verwende ich di.xmlund wie verwende ich di.xmlfür das Modul?

Jeder wusste, bitte zeig es mir Schritt für Schritt.

MrTo-Kane
quelle
2
Weitere Informationen erhalten Sie auf der offiziellen Magento-Website: devdocs.magento.com/guides/v2.0/extension-dev-guide/…
Suresh Chikani

Antworten:

51

What case We use di.xml ?

  • Wir können di.xml für die (Neuschreib-) Präferenz einer bestimmten Klasse verwenden.
  • Wir können die vorhandenen Klasse neu oder ersetzen senden Argumente .
  • Verwenden Sie Plugins, um einige Dinge vor, nach und um die Funktion zu erledigen
  • Durch die Verwendung von virtualTypes wird eine Unterklasse einer anderen Klasse erstellt.

Nehmen wir ein kurzes Beispiel aus dem Magento 2-Kundenmodul.

1. Bezug

<preference for="Magento\Customer\Api\AddressRepositoryInterface"
            type="Magento\Customer\Model\ResourceModel\AddressRepository" />

Wenn Sie über dem Code gefragt werden, Magento\Customer\Api\AddressRepositoryInterfaceob ein Objekt instanziiert werden soll , wird ein Magento \ Customer \ Model \ ResourceModel \ AddressRepository-Objekt (das type-Attribut) instanziiert.

Die Konfiguration der Klassenpräferenzen ist nicht nur für Schnittstellen gedacht, sondern wir können auch die tatsächlichen Klassen ändern.

<preference for="Magento\Customer\Model\CustomerManagement"
            type="Magento\Customer\Model\customModel" />

Sie können die Klasse 'customModel' für 'CustomerManagement' erstellen und die Änderungen vornehmen. Class Preference System als Ersatz für das Class Rewrite System.

http://alanstorm.com/magento_2_object_manager_preferences

2. Argumente

<type name="Magento\Customer\Model\ResourceModel\Group" shared="false">
    <arguments>
        <argument name="groupManagement" xsi:type="object">Magento\Customer\Api\GroupManagementInterface\Proxy</argument>
    </arguments>
</type>

Im obigen Code, Wir senden Objekt als Argument, wir sagen System, um "Proxy" -Klasse als Objekt mit dem Namen von einzufügen groupManagement. Wir können auch Argumente verwenden, um das vorhandene Argument zu ersetzen.

http://alanstorm.com/magento_2_object_manager_argument_replacement

3. Plugin

<type name="Magento\Customer\Model\ResourceModel\Visitor">
    <plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
</type>

Im obigen Code wird public function clean($object)in der Besucherklasse nach der öffentlichen Funktion aufgerufen, afterClean(Visitor $subject, $logResourceModel)die in der Klasse Log enthalten ist.

4 virtuelle Typen

Das Erstellen eines virtuellen Typs ähnelt dem Erstellen einer Unterklasse für eine vorhandene Klasse.

Für weitere Informationen gehen Sie bitte die praktischen Beispiele durch, die ich als Links von Alan erwähnt habe. Durch Übung können Sie klarere Erfahrungen sammeln.

Hoffe das hilft.... :)

Krishna ijjada
quelle
1
hast du eine idee über die einstellung der konfiguration mit ifconfig in di.xml zum aktivieren / deaktivieren des modulprozesses? Wenn Sie diesbezüglich Fragen haben, helfen Sie mir bitte, das Problem zu beheben.
Kartik Asodariya
Sehr nützliche Informationen.
Shivam
2
Wie lernt jemand all diese Dinge?
Mohammed Joraid
Also ruft die <Einstellung> die Klasse nicht in "für" auf, sondern in "Typ" oder so? Ich bin immer noch verwirrend. @@
Fudu
3
oh nvm, ich habe diese wirklich gute Antwort hier gefunden. inchoo.net/magento-2/overriding-classes-magento-2 :)
Fudu