Я вижу в di.xml
файлах из ядра, что некоторые аргументы имеют тип, init_parameter
но значения параметров являются постоянными.
<type name="Magento\Framework\View\Page\Config\Renderer">
<arguments>
<argument name="appMode" xsi:type="init_parameter">Magento\Framework\App\State::PARAM_MODE</argument>
</arguments>
</type>
или этот
<type name="Magento\Framework\App\Cache\State">
<arguments>
<argument name="banAll" xsi:type="init_parameter">Magento\Framework\App\Cache\State::PARAM_BAN_CACHE</argument>
</arguments>
</type>
и много других.
Но из того, что я вижу в интерпретаторе, связанном с init_parameter
константой, используетсяMagento\Framework\App\Arguments\ArgumentInterpreter::evaluate
public function evaluate(array $data)
{
return ['argument' => $this->constInterpreter->evaluate($data)];
}
Но результат немного отличается от Magento\Framework\Data\Argument\Interpreter\Constant::evaluate
public function evaluate(array $data)
{
if (!isset($data['value']) || !defined($data['value'])) {
throw new \InvalidArgumentException('Constant name is expected.');
}
return constant($data['value']);
}
Может кто-нибудь объяснить, пожалуйста, как init_parameter
работает тип и как все происходит под капотом?
Каковы все допустимые значения `xsi: type` в xml из Magento2
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/build/di-xml-file.html
Формат узла :
<argument xsi:type="init_parameter">{Constant::NAME}</argument>
Описание : Глобальный аргумент приложения, представленный
Constant::NAME
как, ищется и передается как аргумент.Возможные значения : постоянное глобальное имя, содержащее аргумент
Формат узла :
<argument xsi:type="const">{Constant::NAME}</argument>
Описание : Константа :: ИМЯ передана в качестве аргумента.
Возможные значения : все имена констант возможны.
Давайте рассмотрим пример ниже.
Magento \ поставщика \ Magento \ модульно-магазин \ и т.д. \ di.xml
Magento \ поставщика \ Magento \ модульно-магазин \ Model \ StoreResolver.php
Идея проста. Вы можете напрямую передать свои переменные и их значение из
di.xml
файла. Вместо того, чтобы определять эти значения в вашей модели.Так что вам просто нужно инициализировать переменные ur, и вы получите значение от ur
di.xml
Надеюсь, поможет
источник