Quali sono tutti i valori `xsi: type` consentiti negli XML da Magento2


20

In Magento 2 (quasi) tutti gli argomenti elencati nei file xml hanno un attributo xsi:typeche determina come viene interpretato il valore dell'argomento.
Ad esempio, nel di.xmlfile del modulo backend c'è questo:

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

questo significa che il valore dell'argomento scopeTypeè il valore della costanteMagento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT

o questo

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

questo significa che il valore dell'argomento templateè la stringa Magento_Theme::root.phtml.

Quali sono tutti i possibili valori di questo xsi:typeattributo?


Hai mai provato a usare un staticinvece di un constper un tale argomento? Non riesco a trovare un tipo che static
funzioni

No. non l'ho fatto. Non credo nemmeno che ci sia supporto perstatic
Marius

Risposte:


36

Ho trovato tutti i tipi controllando i <xs:extension base="argumentType"file * .xsd.

lib/internal/Magento/Framework/Data/etc/argument/types.xsd, questi sono tipi di base :

  • " array "
  • " stringa "
  • " booleano "
  • " oggetto "
  • " configurableObject "
  • " numero "
  • " null "

lib/internal/Magento/Framework/ObjectManager/etc/config.xsd, si trova nei file di.xm l:

  • " oggetto "
  • " init_parameter "
  • " const "

lib/internal/Magento/Framework/View/Layout/etc/elements.xsd, è disponibile nei file di layout * .xml :

  • " opzioni "
  • " url "
  • " aiutante "

Magento/Ui/etc/ui_components.xsd, è disponibile nei file * .xml dei componenti dell'interfaccia utente :

  • " costante "
  • " url "

14

Secondo le mie ricerche, ecco quello che ho trovato:

L'interprete degli argomenti viene creato nel 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 questo codice, puoi vedere chiaramente che vengono usati interpreti diversi in base all'attributo type dell'argomento \Magento\Framework\ObjectManager\Config\Reader\Dom::TYPE_ATTRIBUTE:

  • booleano =>\Magento\Framework\Data\Argument\Interpreter\Boolean
  • stringa =>\Magento\Framework\Data\Argument\Interpreter\StringUtils
  • numero =>\Magento\Framework\Data\Argument\Interpreter\Number
  • null =>\Magento\Framework\Data\Argument\Interpreter\NullType
  • oggetto =>\Magento\Framework\Data\Argument\Interpreter\DataObject
  • const =>\Magento\Framework\Data\Argument\Interpreter\Constant
  • init_parameter => \Magento\Framework\App\Arguments\ArgumentInterpreter(nota che questo accetta il \Magento\Framework\Data\Argument\Interpreter\Constantparametro as e non il parametro del costruttore)

Inoltre viene aggiunto al volo un interprete aggiuntivo per gestire i tipi di array:

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

Nota: sembra che il init_parametertipo sia usato solo nel app\code\Magento\Store\etc\di.xmlper avviare alcune costanti:

<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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.