グローバルdi.xmlには何が入り、エリア固有のdi.xmlには何が入りますか?


7

バックエンドにいくつかの機能を追加するMagento 2モジュールを作成しています。フロントエンドにはまったく触れません。
しかし、etc/adminhtml/di.xml(admin diファイル)ファイルに仮想タイプを配置すると、クラスが見つからないというエラーが発生します。
同じ考え方etc/di.xml(グローバルdiファイル)を追加すると、すべてが正しく機能します。
フォーム修飾子のような他のものは、adminhtml diファイルに追加されたときに適切に機能します。
私が理解したことから、etc/di.xmlファイルとetc/adminhtml/di.xmlファイルの両方がバックエンドページに読み込まれる必要があります。
どうやらこれは常に機能するとは限りません。

以下は、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>

繰り返しますが、私が持っているすべてのクラスはバックエンドでのみ使用されます。
私はこのエラーを受け取ります:

RuntimeException:「\ UmcConfigClassConfigMapper」生成用のソースクラス「\ UmcConfigClassConfig」が存在しません...

しかし、これはうまくいきます。

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

一般的di.xmlに何を配置し、特定の領域に何を配置する必要がありdi.xmlますか?

注:キャッシュと生成フォルダーをクリアしました。

回答:


6

一般的なルールは次のとおりです。

  • すべてのモジュラーDI設定(プレゼンテーションレイヤー構成を除く)を入力する必要があります <module_dir>/etc/di.xml
  • すべてのモジュラープレゼンテーションレイヤーDI設定を配置する必要があります <module_dir>/etc/<area_code>/di.xml

具体的なケースでは、構成をマージする方法も追加する必要があります。

  • モジュールディメンションの構成はマージされた値です

  • エリアディメンションの構成は、グローバルスコープの上書きされた値です

だから、私はあなたのケースで具体的な問題をキャッチしませんが、値の上書きに問題があるようです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.