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


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.... :)


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.