Điều gì diễn ra trong di.xml toàn cầu và những gì đi vào khu vực cụ thể di.xml?


7

Tôi đang tạo một mô-đun Magento 2 để thêm một số chức năng cho phụ trợ. Nó hoàn toàn không chạm vào frontend.
Nhưng nếu tôi đặt một số loại ảo trong etc/adminhtml/di.xmltệp (tệp quản trị di) thì tôi gặp lỗi là không tìm thấy lớp.
Nếu tôi thêm suy nghĩ tương tự vào etc/di.xml(tệp di toàn cầu) thì mọi thứ sẽ hoạt động bình thường.
Những thứ khác như công cụ sửa đổi biểu mẫu hoạt động đúng khi được thêm vào tập tin adminhtml.
Từ những gì tôi hiểu, cả etc/di.xmltập tin và etc/adminhtml/di.xmltập tin nên được tải trên các trang phụ trợ.
Rõ ràng điều này không phải lúc nào cũng hoạt động.

Đây là đánh dấu không hoạt động trong tập tin adminhtml.

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

Một lần nữa, tất cả các lớp tôi có chỉ được sử dụng trong phần phụ trợ.
Tôi nhận được lỗi này:

RuntimeException: Lớp nguồn "\ UmcConfigClassConfig" cho thế hệ "\ UmcConfigClassConfigMapper" không tồn tại .....

Nhưng cái này hoạt động.

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

Những gì nên được đặt trong chung di.xmlvà những gì nên được đặt trong khu vực cụ thể di.xml?

Lưu ý: Tôi đã xóa bộ nhớ cache và thư mục tạo.

Câu trả lời:


6

Quy tắc chung là:

  • Tất cả các cài đặt DI mô-đun (ngoại trừ cấu hình lớp trình bày) NÊN được đưa vào <module_dir>/etc/di.xml
  • Tất cả các lớp trình bày mô-đun DI cài đặt NÊN được đặt <module_dir>/etc/<area_code>/di.xml

Đối với bạn trường hợp cụ thể, cũng cần thêm cách cấu hình hợp nhất:

  • cấu hình trong kích thước mô-đun là giá trị hợp nhất

  • cấu hình trong kích thước khu vực được ghi đè lên các giá trị phạm vi toàn cầu

Vì vậy, tôi không nắm bắt được vấn đề cụ thể trong trường hợp của bạn, nhưng có vẻ như vấn đề với các giá trị ghi đè

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.