Como ativar / desativar dinamicamente <preferência> no di.xml?

10

Atualmente, tenho o seguinte <preference/>em um dos meus arquivos di.xml:

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

Eu tenho uma opção de configuração para ativar / desativar o meu módulo no painel de administração. Eu só quero <preference>que seja ativado quando minha opção de configuração personalizada estiver definida como habilitada.

Como posso ativar e desativar dinamicamente a <preference/>substituição de acordo com a configuração do meu módulo?

xenon
fonte

Respostas:

13

você não pode ativar e / ou desativar as preferências com base em uma configuração.
di.xmlé apenas configuração. você não pode ter lógica, mas pode fazer outra coisa.
Você pode ter em sua classe uma condição que verifica seu sinalizador de configuração e executa alguma ação em conformidade.
Presumo que sua classe RadTest\TestModule\Controller\Contact\Postse estenda Magento\Contact\Controller\Index\Postporque você precisa substituir pelo menos um método.
digamos que você precise substituir o método execute.
Você pode fazer sua turma fazer o seguinte:

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
    }
}
Marius
fonte
1
Na verdade, é isso que tenho feito e estava pensando que seria bom se houvesse uma maneira de desabilitá-los dinamicamente. Agora eu sei que não podemos. Muito obrigado! :)
xenon