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.xml
arquivo (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.xml
arquivo e o etc/adminhtml/di.xml
arquivo 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.xml
e o que deve ser colocado na área específica di.xml
?
Nota: limpei o cache e a pasta de geração.