Wie kann ich <präferenz> in di.xml dynamisch aktivieren / deaktivieren?

10

Ich habe derzeit Folgendes <preference/>in einer meiner di.xml-Dateien:

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

Ich habe eine Konfigurationsoption zum Aktivieren / Deaktivieren für mein Modul im Admin-Bereich. Ich möchte <preference>, dass die Option nur aktiviert wird, wenn meine benutzerdefinierte Konfigurationsoption aktiviert ist.

Wie kann ich das <preference/>Überschreiben dynamisch aktivieren und deaktivieren, je nachdem, welche Konfiguration meines Moduls festgelegt ist?

Xenon
quelle

Antworten:

13

Sie können Einstellungen basierend auf einer Konfigurationseinstellung nicht aktivieren und / oder deaktivieren.
di.xmlist nur Konfiguration. Sie können keine Logik darin haben, aber Sie können etwas anderes tun.
Sie können in Ihrer Klasse eine Bedingung haben, die Ihr Konfigurationsflag überprüft und entsprechende Aktionen ausführt.
Ich gehe davon aus, dass Ihre Klasse RadTest\TestModule\Controller\Contact\Posterweitert wird, Magento\Contact\Controller\Index\Postweil Sie mindestens eine Methode überschreiben müssen.
Angenommen, Sie müssen die Methode überschreiben execute.
Sie können Ihre Klasse dazu bringen:

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
quelle
1
Dies ist eigentlich das, was ich getan habe und dachte, es wäre schön, wenn es eine Möglichkeit gibt, sie dynamisch zu deaktivieren. Jetzt weiß ich, dass wir nicht können. Vielen Dank! :)
Xenon