Was steht in der globalen Datei di.xml und was in der bereichsspezifischen Datei di.xml?

7

Ich erstelle ein Magento 2-Modul, das dem Backend einige Funktionen hinzufügt. Es berührt das Frontend überhaupt nicht.
Wenn ich jedoch einen virtuellen Typ in die etc/adminhtml/di.xmlDatei (admin di file) einfüge, wird die Fehlermeldung angezeigt, dass die Klasse nicht gefunden wurde.
Wenn ich das gleiche Denken in etc/di.xml(die globale di-Datei) hinzufüge, funktioniert alles richtig.
Andere Dinge wie Formularmodifikatoren funktionieren ordnungsgemäß, wenn sie zur Datei adminhtml di hinzugefügt werden.
Soweit ich verstanden habe, sollten sowohl die etc/di.xmlDatei als auch die etc/adminhtml/di.xmlDatei auf die Backend-Seiten geladen werden.
Anscheinend funktioniert das nicht immer.

Hier ist das Markup, das in der Datei adminhtml di nicht funktioniert.

<virtualType name="UmcConfigClassConfigSchemaLocator" type="Umc\Base\Model\Config\SchemaLocator\SchemaLocator">
    <arguments>
        <argument name="fileSchema" xsi:type="string">class</argument>
        <argument name="mergedSchema" xsi:type="string">class</argument>
    </arguments>
</virtualType>
<virtualType name="UmcConfigClassConfigMapperFactory" type="Umc\Base\Model\Config\Mapper\Factory">
    <arguments>
        <argument name="typeMap" xsi:type="array" />
    </arguments>
</virtualType>
<virtualType name="UmcConfigClassConfigConverter" type="Umc\Base\Model\Config\Converter\Converter">
    <arguments>
        <argument name="mapperFactory" xsi:type="object">UmcConfigClassConfigMapperFactory</argument>
        <argument name="mapperList" xsi:type="array" />
        <argument name="idNodes" xsi:type="array">
            <item name="0" xsi:type="string">class</item>
        </argument>
    </arguments>
</virtualType>
<virtualType name="UmcConfigClassConfigReader" type="Magento\Framework\Config\Reader\Filesystem">
    <arguments>
        <argument name="schemaLocator" xsi:type="object">UmcConfigClassConfigSchemaLocator</argument>
        <argument name="converter" xsi:type="object">UmcConfigClassConfigConverter</argument>
        <argument name="fileName" xsi:type="string">class.xml</argument>
        <argument name="idAttributes" xsi:type="array">
            <item name="/classes/class" xsi:type="string">id</item>
        </argument>
        <argument name="defaultScope" xsi:type="string">umc</argument>
    </arguments>
</virtualType>
<type name="Umc\Base\Model\Config\ClassConfig">
    <arguments>
        <argument name="reader" xsi:type="object">UmcConfigClassConfigReader</argument>
    </arguments>
</type>

Auch hier werden alle Klassen, die ich habe, nur im Backend verwendet.
Ich erhalte diesen Fehler:

RuntimeException: Die Quellklasse "\ UmcConfigClassConfig" für die Generierung "\ UmcConfigClassConfigMapper" existiert nicht .....

Aber dieser funktioniert.

<virtualType name="UmcBaseUiDataProviderModuleFormModifierPool" type="Magento\Ui\DataProvider\Modifier\Pool">
    <arguments>
        <argument name="modifiers" xsi:type="array">
            <item name="system" xsi:type="array">
                <item name="class" xsi:type="string">Umc\Base\Ui\DataProvider\Module\Form\Modifier\System</item>
                <item name="sortOrder" xsi:type="number">1</item>
            </item>
        </argument>
    </arguments>
</virtualType>
<type name="Umc\Base\Ui\DataProvider\Module\Form\DataProvider">
    <arguments>
        <argument name="pool" xsi:type="object">UmcBaseUiDataProviderModuleFormModifierPool</argument>
    </arguments>
</type>

Was sollte im Allgemeinen platziert werden di.xmlund was sollte in dem spezifischen Bereich platziert werden di.xml?

Hinweis: Ich habe den Cache und den Generierungsordner geleert.

Marius
quelle

Antworten:

6

Die allgemeine Regel lautet:

  • Alle modularen DI-Einstellungen (außer der Konfiguration der Präsentationsschicht) MÜSSEN eingegeben werden <module_dir>/etc/di.xml
  • Alle DI-Einstellungen der modularen Präsentationsschicht sollten vorgenommen werden <module_dir>/etc/<area_code>/di.xml

Für Ihren konkreten Fall müssen Sie auch hinzufügen, wie die Konfiguration zusammengeführt wird:

  • Die Konfiguration in der Moduldimension besteht aus zusammengeführten Werten

  • Die Konfiguration in der Bereichsdimension besteht aus überschriebenen Werten des globalen Bereichs

Ich verstehe also nicht, was das konkrete Problem in Ihrem Fall ist, aber es sieht nach einem Problem mit dem Überschreiben von Werten aus

KAndy
quelle