O que existe no di.xml global e o que entra no di.xml específico da área?

7

Estou criando um módulo Magento 2 que adiciona alguma funcionalidade ao back-end. Ele não toca no frontend.
Mas se eu colocar algum tipo virtual no etc/adminhtml/di.xmlarquivo (o arquivo de administração di), eu recebo um erro dizendo que a classe não foi encontrada.
Se eu adicionar o mesmo pensamento etc/di.xml(no arquivo di global) tudo funcionará corretamente.
Outras coisas, como modificadores de formulário, funcionam corretamente quando adicionadas ao arquivo adminhtml di.
Pelo que entendi, o etc/di.xmlarquivo e o etc/adminhtml/di.xmlarquivo devem ser carregados nas páginas de back-end.
Aparentemente, isso nem sempre funciona.

Aqui está a marcação que não funciona no arquivo adminhtml di.

<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>

Mais uma vez, todas as classes que tenho são usadas apenas no back-end.
Eu recebo este erro:

RuntimeException: A classe de origem "\ UmcConfigClassConfig" para a geração "\ UmcConfigClassConfigMapper" não existe .....

Mas este funciona.

<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>

O que deve ser colocado no geral di.xmle o que deve ser colocado na área específica di.xml?

Nota: limpei o cache e a pasta de geração.

Marius
fonte

Respostas:

6

A regra comum é:

  • Todas as configurações modulares de DI (exceto para a configuração da camada de apresentação) DEVEM ser colocadas <module_dir>/etc/di.xml
  • Todas as configurações DI da camada de apresentação modular DEVEM ser colocadas em <module_dir>/etc/<area_code>/di.xml

Para seu caso concreto, também é necessário adicionar como a configuração foi mesclada:

  • a configuração na dimensão dos módulos é valores mesclados

  • a configuração na dimensão áreas é sobrescrita valores do escopo global

Então, eu não entendo qual é o problema concreto no seu caso, mas parece um problema com substituição de valores

KAndy
fonte