Bagaimana cara mengaktifkan / menonaktifkan <preferensi> secara dinamis di di.xml?

10

Saat ini saya memiliki yang berikut <preference/>di salah satu file di.xml saya:

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

Saya memiliki opsi aktifkan / nonaktifkan konfigurasi untuk modul saya di panel admin. Saya hanya ingin <preference>itu diaktifkan ketika opsi konfigurasi khusus saya diatur ke diaktifkan.

Bagaimana saya bisa secara dinamis mengaktifkan dan menonaktifkan <preference/>pengesampingan sesuai dengan konfigurasi modul saya diatur?

xenon
sumber

Jawaban:

13

Anda tidak dapat mengaktifkan dan / atau menonaktifkan preferensi berdasarkan pengaturan konfigurasi.
di.xmlhanya konfigurasi. Anda tidak dapat memiliki logika di dalamnya, tetapi Anda dapat melakukan sesuatu yang lain.
Anda dapat memiliki di kelas Anda suatu kondisi yang memeriksa flag konfigurasi Anda dan melakukan beberapa tindakan yang sesuai.
Saya berasumsi kelas Anda RadTest\TestModule\Controller\Contact\Postdiperluas Magento\Contact\Controller\Index\Postkarena Anda harus mengganti setidaknya satu metode.
katakanlah Anda harus mengganti metode execute.
Anda dapat membuat kelas Anda melakukan ini:

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
sumber
1
Ini sebenarnya adalah apa yang telah saya lakukan dan berpikir akan menyenangkan jika ada cara untuk menonaktifkannya secara dinamis. Sekarang saya tahu kita tidak bisa. Terima kasih banyak! :)
xenon