Как динамически включить / отключить <preference> в di.xml?

10

В настоящее время у меня есть следующее <preference/>в одном из моих файлов di.xml:

<preference for="Magento\Contact\Controller\Index\Post" type="RadTest\TestModule\Controller\Contact\Post" />

У меня есть опция включения / выключения конфигурации для моего модуля в панели администратора. Я хочу, чтобы этот параметр <preference>был включен, только если для параметра пользовательской конфигурации установлено значение «включено».

Как я могу динамически включать и отключать <preference/>переопределение в соответствии с настройкой моего модуля?

ксенон
источник

Ответы:

13

Вы не можете включить и / или отключить предпочтения на основе настроек конфигурации.
di.xmlэто просто конфигурация. у вас не может быть логики, но вы можете сделать что-то еще.
Вы можете иметь в своем классе условие, которое проверяет ваш флаг конфигурации и соответственно выполняет некоторые действия.
Я предполагаю, что ваш класс RadTest\TestModule\Controller\Contact\Postрасширяется, Magento\Contact\Controller\Index\Postпотому что вы должны переопределить хотя бы один метод.
скажем, вы должны переопределить метод execute.
Вы можете заставить свой класс сделать это:

namespace RadTest\TestModule\Controller\Contact;
class Post extends \Magento\Contact\Controller\Index\Post
{
    ....
    public function execute()
    {
        if (your config setting is disabled) {
            return parent::execute();
        }
        //your custom logic here
    }
}
Мариус
источник
1
Это на самом деле то, что я делал, и подумал, что будет хорошо, если есть способ динамически отключить их. Теперь я знаю, что мы не можем. Большое спасибо! :)
ксенон