回答:
What case We use di.xml ?
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仮想タイプ
仮想タイプの作成は、既存のクラスのサブクラスを作成するようなものです。
詳細については、アランからのリンクとして言及した実用的な例をご覧ください。実践により、より明確な経験を得ることができます。
お役に立てれば.... :)