가상 유형을 이해하는 다른 방법-
\Class1
다음 생성자 가있는 class가 있다고 가정 해 봅시다.
public function __construct(\Class2 $argOfClass1){...}
그리고 \Class2
다음 생성자가 있습니다-
public function __construct(\Class3 $argOfClass2){...}
지금, 당신은의 유형을 변경하려면 $argOfClass2
에서 \Class3
에 \Class4
,하지만 경우에만 \Class2
사용됩니다 $argOfClass1
.
그렇게 할 수있는 "오래된"방법에 다음을 추가하는 것입니다 di.xml
-
<type name="Class1">
<arguments>
<argument name="argOfClass1" xsi:type="object">Class5</argument>
</arguments>
</type>
\Class5
다음은 어디에 있습니까?
class \Class5 extends \Class2{
public function __construct(\Class4 $argOfClass2){...}
}
이 방법을 사용하는 대신 다음을 추가하여 가상 유형 을 사용하여 동일한 유형 을 달성 할 수 있습니다 di.xml
.
<virtualType name="Class5" type="Class2">
<arguments>
<argument name="argOfClass2" xsi:type="string">Class4</argument>
</arguments>
</virtualType>
<type name="Class1">
<arguments>
<argument name="argOfClass1" xsi:type="object">Class5</argument>
</arguments>
</type>
보시다시피, 가상 유형을 사용하면 의 생성 작업이 절약 Class5
됩니다.
더 참고로 나는 Magento2 가상 유형에 대한 앨런 스톰의 기사를 읽고 제안 - http://alanstorm.com/magento_2_object_manager_virtual_types/
Magento\Framework\ObjectManager\Config\Mapper\Dom::convert
. 이switch
이 곳의 문.