Saya mengambil kursus pengembangan dasar Magento 2 dan latihan Admin Router / Controller sepertinya ketinggalan zaman. Router tidak berfungsi, tetapi controller tidak, itu selalu hanya kembali ke homepage admin. Kode untuk aplikasi router / kode / Pelatihan / Tes / etc / adminhtml / routes.xml :
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/framework/App/etc/routes.xsd">
<router id="admin">
<route id="test" frontName="test">
<module name="Training_Test" before="Magento_Backend" />
</route>
</router>
</config>
Kode untuk aplikasi pengontrol Admin / kode / Pelatihan / Tes / Pengendali / Adminhtml / Aksi / Index.php :
<?php
namespace Training\Test\Controller\Adminhtml\Action;
class Index extends \Magento\Backend\App\Action
{
public function execute()
{
die("test reached controller");
}
protected function _isAllowed() {
return true;
}
}
Ketika saya pergi ke url admin admin / test / action / index itu hanya pengalihan dan tidak ada yang terjadi. Jika saya menambahkan konstruktor dan menggunakan xdebug, itu menunjukkan bahwa ia mencapai controller konstruktor, tetapi tidak pernah melakukan bagian eksekusi. Apa yang saya lewatkan?
Jawaban:
Ini terjadi karena 'kunci rahasia' tidak ada ketika Anda mengetik URL secara manual. Fitur kunci rahasia diaktifkan secara default dan dapat dinonaktifkan di sini:
Stores => Configuration => Advanced => Admin => Security => Add Secret Key to URLs
. Maka Anda harus dapat mencapai tindakan Anda.sumber
Dalam
router.xml
file (companyName/customModule/etc/adminhtml/router.xml
) Bagi saya solusinya adalah memiliki id rute dan nama depan memiliki nilai yang sama. Dalam kasus Anda ini adalah:sumber
<route id="Bmanager" frontName="bmanager">
ke<route id="bmanager" frontName="bmanager">
dan sekarang saya dapat membuat pengontrol dasar berfungsi seperti yang dijelaskan pada tubuh pertanyaan. Masih tidak beruntung dengan pengontrol khusus saya. Sunting: Sebenarnya salah satu pengontrol khusus saya mulai memberikan beberapa kesalahan. Jauh lebih baik daripada redirect tanpa erorrs.Mungkin lebih baik menggunakan properti itu:
sumber
Ketika mencoba mengakses modul / fungsionalitas di backend (Adminhtml), Magento memeriksa keberadaan rahasia
Form Keys
, dan jika / ketika seseorang mencoba mengakses suatu tindakan dan tidak menyediakan FormKey (mis: menghubungkan tautan ke url) dan / atau memasok FormKey Tidak Valid - Adminhtml AbstractAction (Magento \ Backend \ App \ AbstractAction) akan merutekan halaman Startup yang ditentukan Admin UIX pengguna (yang biasanya merupakan halaman Dashboard)[Mekanisme ini berfungsi sebagai "pos pemeriksaan keamanan" untuk mencegah pengguna mengakses bagian-bagian dari Backend yang mereka tidak memiliki akses ke]
Saat mengakses opsi dari Menu Admin UIX - Magento akan secara otomatis menambahkan FormKey untuk Anda.
Untuk mencegah pemeriksaan FormKey Anda memiliki dua opsi:
(a) Matikan Validasi FormKey
Navigasi: Toko -> Pengaturan: Konfigurasi -> Lanjutan: Admin -> Keamanan -> Pengaturan "Tambahkan Kunci Rahasia ke URL" ke "Tidak"
Sangat penting untuk diingat bahwa hal itu akan mematikan Validasi Kunci Rahasia, dan karenanya dapat membuat aplikasi Anda rentan.
(B) Matikan Validasi FormKey untuk controller Anda
Tetapkan tindakan yang ingin Anda bebaskan, dari cek FormKey, di atribut "$ _publicActions" pada Pengontrol Admin Anda.
protected $ _publicActions = ['ENTER_NAME_OF_ACTION'];
Contoh Kode:
sumber
Masalah pengalihan rute dengan kunci keamanan diaktifkan adalah url tindakan yang diatur di menu.xml di bawah / etc / adminhtml /
Nilai penting adalah parameter tindakan dalam item menu. Perhatikan untuk mengatur nama modul yang dideklarasikan ke routes.xml ke dalam parameter id. Dalam kasus saya: "mycompany_mymodule"
sumber
<input name="form_key" type="hidden" value="<?php echo $block->escapeHtml($block->getFormKey()) ?>" />
akan membantutetapi Anda bisa menambahkan brickpoing ke vendor / magento / module-backend / App / AbstractAction.php
sumber