Tất cả các giá trị `xsi: type` được phép trong xml là gì từ Magento2


20

Trong Magento 2 (gần như) tất cả các đối số được liệt kê trong tệp xml đều có thuộc tính xsi:typexác định giá trị của đối số được lặp lại như thế nào.
Ví dụ, trong di.xmltệp của mô-đun phụ trợ có:

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

điều này có nghĩa là giá trị của đối số scopeTypelà giá trị của hằngMagento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT

hoặc cái này

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

điều này có nghĩa là giá trị của đối số templatelà chuỗi Magento_Theme::root.phtml.

Tất cả các giá trị có thể của xsi:typethuộc tính này là gì?


Bạn đã bao giờ thử sử dụng staticthay vì một constđố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ột staticlĩnh vực trong lớp của mình :-(
peedee

Không. Tôi không có. Tôi thậm chí không nghĩ rằng có sự hỗ trợ chostatic
Marius

Câu trả lời:


36

Tôi đã tìm thấy tất cả các loại bằng cách kiểm tra <xs:extension base="argumentType"các tệp * .xsd.

lib/internal/Magento/Framework/Data/etc/argument/types.xsd, đây là các loại cơ sở :

  • " mảng "
  • " chuỗi "
  • " boolean "
  • " đối tượng "
  • " configureableObject "
  • " số "
  • " không "

lib/internal/Magento/Framework/ObjectManager/etc/config.xsd, có thể được tìm thấy trong các tập tin di.xm l:

  • " đối tượng "
  • " init_parameter "
  • " const "

lib/internal/Magento/Framework/View/Layout/etc/elements.xsd, có thể được tìm thấy trong bố cục * .xml tệp:

  • " tùy chọn "
  • " url "
  • " người trợ giúp "

Magento/Ui/etc/ui_components.xsd, có thể được tìm thấy trong các tệp * .xml của các thành phần UI :

  • " không đổi "
  • " url "

14

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\Constanttham 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_parameterloạ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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.