Theo nghiên cứu của tôi, đây là những gì tôi đã tìm thấy:
Trình thông dịch đối số được tạo trong 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;
}
Trong mã này, bạn có thể thấy rõ rằng các trình thông dịch khác nhau được sử dụng dựa trên thuộc tính loại của đối số \Magento\Framework\ObjectManager\Config\Reader\Dom::TYPE_ATTRIBUTE
:
- boolean =>
\Magento\Framework\Data\Argument\Interpreter\Boolean
- chuỗi =>
\Magento\Framework\Data\Argument\Interpreter\StringUtils
- số =>
\Magento\Framework\Data\Argument\Interpreter\Number
- null =>
\Magento\Framework\Data\Argument\Interpreter\NullType
- đối tượng =>
\Magento\Framework\Data\Argument\Interpreter\DataObject
- const =>
\Magento\Framework\Data\Argument\Interpreter\Constant
- init_parameter =>
\Magento\Framework\App\Arguments\ArgumentInterpreter
(lưu ý rằng cái này lấy \Magento\Framework\Data\Argument\Interpreter\Constant
tham số làm tham số chứ không phải tham số constructor)
Ngoài ra, một trình thông dịch bổ sung được thêm vào nhanh chóng để xử lý các kiểu mảng:
- mảng =>
\Magento\Framework\Data\Argument\Interpreter\ArrayType
Lưu ý: có vẻ như init_parameter
loại chỉ được sử dụng trong app\code\Magento\Store\etc\di.xml
để bắt đầu một số hằng số:
<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>
static
thay vì mộtconst
đối số như vậy chưa? Tôi dường như không thể tìm thấy một loại hoạt động cho mộtstatic
lĩnh vực trong lớp của mình :-(