Magento 2-di.xmlを使用する場合とモジュールにdi.xmlを使用する方法


回答:


51

What case We use di.xml ?

  • 特定のクラスの設定(書き換え)にdi.xmlを使用できます。
  • 新規を送信するか、既存のクラス引数を置き換えることができます。
  • プラグインを使用して、関数の前、後、および前後にいくつかのことを行います
  • virtualTypesを使用して、別のクラスのサブクラスを作成します。

Magento 2カスタマーモジュールの簡単な例を見てみましょう。

1.設定

<preference for="Magento\Customer\Api\AddressRepositoryInterface"
            type="Magento\Customer\Model\ResourceModel\AddressRepository" />

上記のコードでは、誰かがインスタンスを作成するように要求するとMagento\Customer\Api\AddressRepositoryInterface、Magento \ Customer \ Model \ ResourceModel \ AddressRepositoryオブジェクト(type属性)がインスタンス化されます。

クラス設定の構成は、インターフェイスだけでなく、実際のクラスも変更できます。

<preference for="Magento\Customer\Model\CustomerManagement"
            type="Magento\Customer\Model\customModel" />

「CustomerManagement」の「customModel」クラスを作成して、変更を行うことができます。クラス書き換えシステムの代わりとしてのクラスプリファレンスシステム。

http://alanstorm.com/magento_2_object_manager_preferences

2.引数

<type name="Magento\Customer\Model\ResourceModel\Group" shared="false">
    <arguments>
        <argument name="groupManagement" xsi:type="object">Magento\Customer\Api\GroupManagementInterface\Proxy</argument>
    </arguments>
</type>

上記のコードでは、引数としてオブジェクトを送信しています。「Proxy」クラスをという名前のオブジェクトとして挿入するシステムを指定していますgroupManagement。また、引数を使用して既存の引数を置き換えることもできます。

http://alanstorm.com/magento_2_object_manager_argument_replacement

3.プラグイン

<type name="Magento\Customer\Model\ResourceModel\Visitor">
    <plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
</type>

上記のコードで public function clean($object)は、訪問者クラスafterClean(Visitor $subject, $logResourceModel)で、Logクラスにあるパブリック関数の後に呼び出されます。

4仮想タイプ

仮想タイプの作成は、既存のクラスのサブクラスを作成するようなものです。

詳細については、アランからのリンクとして言及した実用的な例をご覧ください。実践により、より明確な経験を得ることができます。

お役に立てれば.... :)


1
モジュールプロセスを有効/無効にするためのdi.xmlのifconfigを使用した設定の構成について何かご存知ですか?そのことについてあなたが問題を解決するのを助けてください。
Kartik Asodariya

非常に役立つ情報。
シヴァム

2
誰かがこれらすべてをどうやって学ぶのでしょうか?
モハメッドジョレード

<preference>は、「for」でクラスを呼び出す代わりに、「type」などでクラスを呼び出しますか?私はまだこれについて混乱しています。@@
fudu

3
ああnvm、私はこの本当に良い答えをここで見つけました。inchoo.net/magento-2/overriding-classes-magento-2 :)
fudu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.