Quali sono tutti i valori del tipo consentito `XSI: Type` in XML di Magento2
Domanda
In Magento 2 (quasi) Tutti gli argomenti elencati in file XML hanno un attributo xsi:type
che determinano come il valore dell'argomento è consegnato.
Ad esempio, nel file di.xml
del modulo Backend è questo:
<argument name="scopeType" xsi:type="const">Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT</argument>
.
Ciò significa che il valore dell'argomento scopeType
è il valore del Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT
costante
o questo
<argument name="template" xsi:type="string">Magento_Theme::root.phtml</argument>
.
Ciò significa che il valore dell'argomento template
è la stringa Magento_Theme::root.phtml
.
Quali sono tutti i valori possibili di questo attributo xsi:type
?
Soluzione
Ho trovato tutti i tipi controllando <xs:extension base="argumentType"
in file * .xsd.
lib/internal/Magento/Framework/Data/etc/argument/types.xsd
, questi sono Tipi di base :
- .
- "
array "
- "
stringa " - "
boolean " - "
oggetto " - " configurablebreableobject "
- "
numero " - " null "
lib/internal/Magento/Framework/ObjectManager/etc/config.xsd
, può essere trovato in DI.xm l:
- .
- "
oggetto "
- "
init_parameter " - "
cost "
lib/internal/Magento/Framework/View/Layout/etc/elements.xsd
, può essere trovato in Layout * .xml Files:
- .
- "
opzioni "
- "
URL " - "
helper "
Magento/Ui/etc/ui_components.xsd
, è possibile trovare in Componenti UI '* .xml Files:
- .
- "
costante "
- "
URL "
Altri suggerimenti
Secondo le mie ricerche, ecco cosa ho trovato:
L'interprete dell'argomento 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, è possibile vedere chiaramente che gli interpreti diversi vengono utilizzati in base all'attributo del tipo dell'argomento \Magento\Framework\ObjectManager\Config\Reader\Dom::TYPE_ATTRIBUTE
:
- .
- boolean =>
\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 => generacodictagcode (nota che questo prende il\Magento\Framework\App\Arguments\ArgumentInterpreter
come parametro e non il parametro del costruttore)
Anche un interprete aggiuntivo viene aggiunto al volo per gestire i tipi di array:
- .
- Array =>
\Magento\Framework\Data\Argument\Interpreter\Constant
Nota: Sembra che il tipo di \Magento\Framework\Data\Argument\Interpreter\ArrayType
sia utilizzato solo nel init_parameter
per 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>
.