Was sind die erlaubten `xsi: type` Werte in den xml's von Magento2?


20

In Magento 2 haben (fast) alle in XML-Dateien aufgelisteten Argumente ein Attribut xsi:type, das bestimmt, wie der Wert des Arguments interpretiert wird.
In der di.xmlDatei des Backend-Moduls gibt es zum Beispiel Folgendes:

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

Dies bedeutet, dass der Wert des Arguments scopeTypeder Wert der Konstante istMagento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT

oder dieses

<argument name="template" xsi:type="string">Magento_Theme::root.phtml</argument>

Dies bedeutet, dass der Wert des Arguments templatedie Zeichenfolge ist Magento_Theme::root.phtml.

Was sind alle möglichen Werte dieses xsi:typeAttributs?


Haben Sie jemals versucht, a staticanstelle von a constfür ein solches Argument zu verwenden? Ich kann anscheinend keinen Typ finden, der für ein staticFeld in meiner Klasse funktioniert :-(
Peedee

Nein, habe ich nicht. Ich glaube nicht einmal, dass es Unterstützung gibt fürstatic
Marius

Antworten:


36

Ich habe alle Typen gefunden, indem ich <xs:extension base="argumentType"* .xsd-Dateien eingecheckt habe.

lib/internal/Magento/Framework/Data/etc/argument/types.xsdDies sind Basistypen :

  • " array "
  • " string "
  • " boolean "
  • " Objekt "
  • " konfigurierbaresObjekt "
  • " Nummer "
  • " null "

lib/internal/Magento/Framework/ObjectManager/etc/config.xsd, finden Sie in den Dateien von di.xm l:

  • " Objekt "
  • " init_parameter "
  • " const "

lib/internal/Magento/Framework/View/Layout/etc/elements.xsdfinden Sie in Layout * .xml- Dateien:

  • " Optionen "
  • " url "
  • " Helfer "

Magento/Ui/etc/ui_components.xsdfinden Sie in den * .xml- Dateien der UI-Komponenten :

  • " konstant "
  • " url "

14

Nach meinen Recherchen habe ich Folgendes gefunden:

Das Argument Interpreter wird erstellt in 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;
}

In diesem Code können Sie deutlich sehen, dass unterschiedliche Interpreter basierend auf dem type-Attribut des Arguments verwendet werden \Magento\Framework\ObjectManager\Config\Reader\Dom::TYPE_ATTRIBUTE:

  • Boolescher Wert =>\Magento\Framework\Data\Argument\Interpreter\Boolean
  • Zeichenfolge =>\Magento\Framework\Data\Argument\Interpreter\StringUtils
  • Nummer =>\Magento\Framework\Data\Argument\Interpreter\Number
  • null =>\Magento\Framework\Data\Argument\Interpreter\NullType
  • Objekt =>\Magento\Framework\Data\Argument\Interpreter\DataObject
  • const =>\Magento\Framework\Data\Argument\Interpreter\Constant
  • init_parameter => \Magento\Framework\App\Arguments\ArgumentInterpreter(beachte, dass dies der \Magento\Framework\Data\Argument\Interpreter\Constantas-Parameter ist und nicht der Konstruktor-Parameter)

Es wird auch ein zusätzlicher Interpreter hinzugefügt, um Array-Typen zu handhaben:

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

Hinweis: Der init_parameterTyp wird anscheinend nur app\code\Magento\Store\etc\di.xmlzum Initiieren einiger Konstanten verwendet:

<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>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.