Jakie są wszystkie dozwolone wartości `xsi: type` w plikach XML z Magento2

20

W Magento 2 (prawie) wszystkie argumenty wymienione w plikach xml mają atrybut, xsi:typektóry określa, w jaki sposób wartość argumentu jest interpretowana.
Na przykład w di.xmlpliku 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 scopeTypejest 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 templatejest ciąg Magento_Theme::root.phtml.

Jakie są wszystkie możliwe wartości tego xsi:typeatrybutu?

Marius
źródło
Czy kiedykolwiek próbowałeś użyć staticzamiast consttakiego argumentu? Nie mogę znaleźć typu, który działa dla staticpola w mojej klasie :-(
peedee
Nie, nie zrobiłem tego. Nie sądzę nawet, żeby istniało poparcie dlastatic
Mariusa

Odpowiedzi:

36

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 :

  • tablica
  • ciąg
  • boolean
  • obiekt
  • configurableObject
  • liczba
  • null

lib/internal/Magento/Framework/ObjectManager/etc/config.xsd, można znaleźć w plikach di.xm l:

  • obiekt
  • parametr_inicjalizacyjny
  • const

lib/internal/Magento/Framework/View/Layout/etc/elements.xsd, można znaleźć w plikach układu * .xml :

  • opcje
  • url
  • pomocnik

Magento/Ui/etc/ui_components.xsd, można znaleźć w plikach * .xml składników interfejsu użytkownika :

  • stały
  • url
Arkadii Chyzhov
źródło
14

Według moich badań oto, co znalazłem:

Interpretator argumentów jest tworzony w 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;
}

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:

  • boolean =>\Magento\Framework\Data\Argument\Interpreter\Boolean
  • ciąg =>\Magento\Framework\Data\Argument\Interpreter\StringUtils
  • liczba =>\Magento\Framework\Data\Argument\Interpreter\Number
  • null =>\Magento\Framework\Data\Argument\Interpreter\NullType
  • obiekt =>\Magento\Framework\Data\Argument\Interpreter\DataObject
  • const =>\Magento\Framework\Data\Argument\Interpreter\Constant
  • init_parameter => \Magento\Framework\App\Arguments\ArgumentInterpreter(zwróć uwagę, że ten przyjmuje \Magento\Framework\Data\Argument\Interpreter\Constantparametr jako a nie parametr konstruktora)

Ponadto w locie dodawany jest dodatkowy tłumacz, który obsługuje typy tablic:

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

Uwaga: wygląda na to, że ten init_parametertyp jest używany tylko app\code\Magento\Store\etc\di.xmldo inicjowania niektórych stałych:

<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 at Digital Pianism
źródło