bagaimana saya bisa menulis ulang sebuah pengontrol (itu sebenarnya sebuah tindakan) di Magento 2?
Saya mencoba, seperti yang diperintahkan di sini seperti ini:
Saya memiliki modul saya sendiri yang disebut Namespace_Module
dengan di.xml
file, yang dipertimbangkan, karena sistem yang sama bekerja pada model dan blok
Contoh:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<!-- this one doesn't work for a controller action -->
<preference for="Magento\Backend\Controller\Adminhtml\Dashboard\RefreshStatistics"
type="Namespace\Module\Controller\Adminhtml\Dashboard\RefreshStatistics" />
<!-- this one works for a model -->
<preference for="Magento\Customer\Model\Resource\GroupRepository"
type="Namespace\Module\Model\Resource\Customer\GroupRepository" />
<!-- this one works also for a block -->
<preference for="Magento\Backend\Block\Dashboard"
type="Namespace\Module\Block\Backend\Dashboard" />
</config>
Saya mencoba mengganti statistik refresh dasbor dengan tindakan saya sendiri. Melakukannya seperti di atas, execute
metode di kelas asli masih dipanggil dan bukan milik saya.
var/cache
dan var/generation
dibersihkan.
Jawaban:
Menemukannya.
Sebenarnya apa yang saya posting dalam pertanyaan adalah cara yang benar untuk menulis ulang controller.
berfungsi dengan baik.
Masalahnya bagi saya adalah ini. Saya lupa menyebutkan bahwa saya menghapus beberapa modul Magento2 dan di antaranya adalah
Reports
modul. Saya tidak menyatakannya dalam pertanyaan karena saya pikir itu tidak penting.Metode di atas untuk pengontrol penulisan ulang (dan mungkin kelas lain) berfungsi jika semua kelas yang Anda coba ubah ada dan semua kelas induknya juga.
Jadi yang asli
Magento\Backend\Controller\Adminhtml\Dashboard\RefreshStatistics
meluasMagento\Reports\Controller\Adminhtml\Report\Statistics
yang telah saya hapus.Dalam magento 2 rute dikumpulkan dengan memindai folder
Controller
folder untuk semua modul yang diaktifkan dan mereka dikumpulkan dalam array.Sejauh ini baik.
Saya berakhir dengan baris ini antara lain:
Kemudian permintaan dicocokkan dengan rute
magento\backend\controller\adminhtml\dashboard\refreshstatistics
dan Magento memeriksa apakah kelas yang sesuai dengan rute itu adalah subkelas dariMagento\Framework\App\ActionInterface
. Karena rute dikumpulkan sebelum kelas saya harus diidentifikasi dan dipakai, kelas lama divalidasi bukan milikku. Dan kelas induk dari kelasMagento\Backend\Controller\Adminhtml\Dashboard\RefreshStatistics
tersebut tidak ada.Solusi untuk menjaga modul laporan dinonaktifkan tetapi tetap membuatnya bekerja adalah dengan membuat interseptor untuk metode yang membaca semua rute dan mengganti rute yang disebutkan di atas.
Jadi saya menambahkan ini
di.xml
dan plugin saya terlihat seperti ini:
sumber
jangan gunakan plugin gunakan preferensi untuk memperluas modul inti apa pun yang ada di di.xml
dan di Product.php
Cara Mengesampingkan Blok Inti, Model, dan pengontrol di Magento2
sumber
around
tidak akan bekerja untuk saya. Saya ingin benar-benar mengubah perilaku pengontrol asli.Saya memiliki pengontrol penulisan ulang untuk model review. file composer.json:
file pendaftaran.php
file app / code / Apple / Tinjauan / etc / module.xml:
Dalam file controller untuk model ulasan,
app / code / Apple / Tinjauan / Pengendali / Post.php
Ini adalah kode kerja untuk penggantian pengontrol peninjauan di magento2. Terima kasih.
sumber