Di Magento 2 (hampir) semua argumen yang tercantum dalam file xml memiliki atribut xsi:type
yang menentukan bagaimana nilai argumen itu ditafsirkan.
Misalnya, dalam di.xml
file modul backend ada ini:
<argument name="scopeType" xsi:type="const">Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT</argument>
ini berarti bahwa nilai argumen scopeType
adalah nilai konstantaMagento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT
atau yang ini
<argument name="template" xsi:type="string">Magento_Theme::root.phtml</argument>
ini berarti bahwa nilai argumennya template
adalah string Magento_Theme::root.phtml
.
Apa saja nilai yang mungkin dari xsi:type
atribut ini ?
static
bukanconst
untuk argumen seperti itu? Sepertinya saya tidak dapat menemukan tipe yang berfungsi untukstatic
bidang di kelas saya :-(static
Jawaban:
Saya telah menemukan semua jenis dengan memeriksa
<xs:extension base="argumentType"
file * .xsd.lib/internal/Magento/Framework/Data/etc/argument/types.xsd
, ini adalah tipe dasar :lib/internal/Magento/Framework/ObjectManager/etc/config.xsd
, dapat ditemukan dalam file di.xm l:lib/internal/Magento/Framework/View/Layout/etc/elements.xsd
, dapat ditemukan di file layout * .xml :Magento/Ui/etc/ui_components.xsd
, dapat ditemukan di file * .xml komponen UI :sumber
Menurut penelitian saya, inilah yang saya temukan:
Penafsir argumen dibuat di
lib\internal\Magento\Framework\App\ObjectManagerFactory.php
:Dalam kode ini, Anda dapat dengan jelas melihat bahwa penafsir yang berbeda digunakan berdasarkan atribut tipe argumen
\Magento\Framework\ObjectManager\Config\Reader\Dom::TYPE_ATTRIBUTE
:\Magento\Framework\Data\Argument\Interpreter\Boolean
\Magento\Framework\Data\Argument\Interpreter\StringUtils
\Magento\Framework\Data\Argument\Interpreter\Number
\Magento\Framework\Data\Argument\Interpreter\NullType
\Magento\Framework\Data\Argument\Interpreter\DataObject
\Magento\Framework\Data\Argument\Interpreter\Constant
\Magento\Framework\App\Arguments\ArgumentInterpreter
(perhatikan bahwa ini mengambil\Magento\Framework\Data\Argument\Interpreter\Constant
parameter as dan bukan parameter konstruktor)Juga penerjemah tambahan ditambahkan dengan cepat untuk menangani tipe array:
\Magento\Framework\Data\Argument\Interpreter\ArrayType
Catatan: sepertinya
init_parameter
jenis ini hanya digunakanapp\code\Magento\Store\etc\di.xml
untuk memulai beberapa konstanta:sumber