W Magento 2 (prawie) wszystkie argumenty wymienione w plikach xml mają atrybut, xsi:type
który określa, w jaki sposób wartość argumentu jest interpretowana.
Na przykład w di.xml
pliku modułu zaplecza znajduje się:
<argument name="scopeType" xsi:type="const">Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT</argument>
oznacza to, że wartość argumentu scopeType
jest wartością stałejMagento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT
albo ten
<argument name="template" xsi:type="string">Magento_Theme::root.phtml</argument>
oznacza to, że wartością argumentu template
jest ciąg Magento_Theme::root.phtml
.
Jakie są wszystkie możliwe wartości tego xsi:type
atrybutu?
static
zamiastconst
takiego argumentu? Nie mogę znaleźć typu, który działa dlastatic
pola w mojej klasie :-(static
Odpowiedzi:
Znalazłem wszystkie typy, sprawdzając
<xs:extension base="argumentType"
pliki * .xsd.lib/internal/Magento/Framework/Data/etc/argument/types.xsd
, są to typy podstawowe :lib/internal/Magento/Framework/ObjectManager/etc/config.xsd
, można znaleźć w plikach di.xm l:lib/internal/Magento/Framework/View/Layout/etc/elements.xsd
, można znaleźć w plikach układu * .xml :Magento/Ui/etc/ui_components.xsd
, można znaleźć w plikach * .xml składników interfejsu użytkownika :źródło
Według moich badań oto, co znalazłem:
Interpretator argumentów jest tworzony w
lib\internal\Magento\Framework\App\ObjectManagerFactory.php
:W tym kodzie widać wyraźnie, że w zależności od atrybutu typu argumentu używane są różne interpretatory
\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
(zwróć uwagę, że ten przyjmuje\Magento\Framework\Data\Argument\Interpreter\Constant
parametr jako a nie parametr konstruktora)Ponadto w locie dodawany jest dodatkowy tłumacz, który obsługuje typy tablic:
\Magento\Framework\Data\Argument\Interpreter\ArrayType
Uwaga: wygląda na to, że ten
init_parameter
typ jest używany tylkoapp\code\Magento\Store\etc\di.xml
do inicjowania niektórych stałych:źródło