Apa semua nilai `xsi: type` yang diizinkan dalam xml dari Magento2

20

Di Magento 2 (hampir) semua argumen yang tercantum dalam file xml memiliki atribut xsi:typeyang menentukan bagaimana nilai argumen itu ditafsirkan.
Misalnya, dalam di.xmlfile modul backend ada ini:

<argument name="scopeType" xsi:type="const">Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT</argument>

ini berarti bahwa nilai argumen scopeTypeadalah 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 templateadalah string Magento_Theme::root.phtml.

Apa saja nilai yang mungkin dari xsi:typeatribut ini ?

Marius
sumber
Pernahkah Anda mencoba menggunakan staticbukan constuntuk argumen seperti itu? Sepertinya saya tidak dapat menemukan tipe yang berfungsi untuk staticbidang di kelas saya :-(
peedee
Tidak, saya tidak. Saya bahkan tidak berpikir ada dukungan untukstatic
Marius

Jawaban:

36

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 :

  • " array "
  • " string "
  • " boolean "
  • " objek "
  • "dapat dikonfigurasiObject "
  • " angka "
  • " null "

lib/internal/Magento/Framework/ObjectManager/etc/config.xsd, dapat ditemukan dalam file di.xm l:

  • " objek "
  • " init_parameter "
  • " const "

lib/internal/Magento/Framework/View/Layout/etc/elements.xsd, dapat ditemukan di file layout * .xml :

  • " opsi "
  • " url "
  • " pembantu "

Magento/Ui/etc/ui_components.xsd, dapat ditemukan di file * .xml komponen UI :

  • " konstan "
  • " url "
Arkadii Chyzhov
sumber
14

Menurut penelitian saya, inilah yang saya temukan:

Penafsir argumen dibuat di lib\internal\Magento\Framework\App\ObjectManagerFactory.php:

protected function createArgumentInterpreter(
    \Magento\Framework\Stdlib\BooleanUtils $booleanUtils
) {
    $constInterpreter = new \Magento\Framework\Data\Argument\Interpreter\Constant();
    $result = new \Magento\Framework\Data\Argument\Interpreter\Composite(
        [
            'boolean' => new \Magento\Framework\Data\Argument\Interpreter\Boolean($booleanUtils),
            'string' => new \Magento\Framework\Data\Argument\Interpreter\StringUtils($booleanUtils),
            'number' => new \Magento\Framework\Data\Argument\Interpreter\Number(),
            'null' => new \Magento\Framework\Data\Argument\Interpreter\NullType(),
            'object' => new \Magento\Framework\Data\Argument\Interpreter\DataObject($booleanUtils),
            'const' => $constInterpreter,
            'init_parameter' => new \Magento\Framework\App\Arguments\ArgumentInterpreter($constInterpreter),
        ],
        \Magento\Framework\ObjectManager\Config\Reader\Dom::TYPE_ATTRIBUTE
    );
    // Add interpreters that reference the composite
    $result->addInterpreter('array', new \Magento\Framework\Data\Argument\Interpreter\ArrayType($result));
    return $result;
}

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:

  • boolean =>\Magento\Framework\Data\Argument\Interpreter\Boolean
  • string =>\Magento\Framework\Data\Argument\Interpreter\StringUtils
  • angka =>\Magento\Framework\Data\Argument\Interpreter\Number
  • null =>\Magento\Framework\Data\Argument\Interpreter\NullType
  • objek =>\Magento\Framework\Data\Argument\Interpreter\DataObject
  • const =>\Magento\Framework\Data\Argument\Interpreter\Constant
  • init_parameter => \Magento\Framework\App\Arguments\ArgumentInterpreter(perhatikan bahwa ini mengambil \Magento\Framework\Data\Argument\Interpreter\Constantparameter as dan bukan parameter konstruktor)

Juga penerjemah tambahan ditambahkan dengan cepat untuk menangani tipe array:

  • array =>\Magento\Framework\Data\Argument\Interpreter\ArrayType

Catatan: sepertinya init_parameterjenis ini hanya digunakan app\code\Magento\Store\etc\di.xmluntuk memulai beberapa konstanta:

<argument name="xFrameOpt" xsi:type="init_parameter">Magento\Framework\App\Response\XFrameOptPlugin::DEPLOYMENT_CONFIG_X_FRAME_OPT</argument>
...
<argument name="isCustomEntryPoint" xsi:type="init_parameter">Magento\Store\Model\Store::CUSTOM_ENTRY_POINT_PARAM</argument>
...
<argument name="runMode" xsi:type="init_parameter">Magento\Store\Model\StoreManager::PARAM_RUN_TYPE</argument>
<argument name="scopeCode" xsi:type="init_parameter">Magento\Store\Model\StoreManager::PARAM_RUN_CODE</argument>
Raphael di Digital Pianism
sumber