Comment activer / désactiver dynamiquement <préférence> dans di.xml?

10

J'ai actuellement les éléments suivants <preference/>dans l'un de mes fichiers di.xml:

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

J'ai une option de configuration activer / désactiver pour mon module dans le panneau d'administration. Je souhaite que l' <preference>option soit activée uniquement lorsque mon option de configuration personnalisée est définie sur activé.

Comment puis-je activer et désactiver dynamiquement le <preference/>remplacement en fonction de la configuration de mon module est définie?

xénon
la source

Réponses:

13

vous ne pouvez pas activer et / ou désactiver les préférences basées sur un paramètre de configuration.
di.xmlest juste une configuration. vous ne pouvez pas avoir de logique dedans, mais vous pouvez faire autre chose.
Vous pouvez avoir dans votre classe une condition qui vérifie votre indicateur de configuration et effectue certaines actions en conséquence.
Je suppose que votre classe RadTest\TestModule\Controller\Contact\Posts'étend Magento\Contact\Controller\Index\Postcar vous devez remplacer au moins une méthode.
disons que vous devez remplacer la méthode execute.
Vous pouvez demander à votre classe de faire ceci:

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
la source
1
C'est en fait ce que j'ai fait et je pensais que ce serait bien s'il y avait un moyen de les désactiver dynamiquement. Maintenant, je sais que nous ne pouvons pas. Merci beaucoup! :)
xénon