Покажу на примере стандартного виджета catalog_product_link
:
Как Вы видите, для виджета указао класс PHP Magento\Catalog\Block\Product\Widget\Link
, однако если Вы поищете этот класс в программном коде Magento 2, то не найдёте его. Этого класса не существует, это и есть пример virtualType
:
Класс Magento\Catalog\Block\Product\Widget\Link
на самом деле является классом Magento\Catalog\Block\Widget\Link
, однако со своим особенным внедрением завимости: аргумент entityResource
его конструктора имеет тип Magento\Catalog\Model\ResourceModel\Product
.
Посмотрите на конструктор реального класса Magento\Catalog\Block\Widget\Link
:
Как Вы видите, аргумент entityResource
его конструктора имеет тип Magento\Catalog\Model\ResourceModel\AbstractResource
.
Когда же Вы используете виртуальное имя Magento\Catalog\Block\Product\Widget\Link
, то аргумент entityResource
будет иметь тип Magento\Catalog\Model\ResourceModel\Product
.
Дополнительное пояснение на StackExchange: http://magento.stackexchange.com/a/33140/18793