Magento 2 Tindakan Admin Kustom Diarahkan ke Dasbor


18

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?


Saya harap dalam fungsi kode Anda _isemungkinkan dikembalikan benar. Dalam contoh "kembali" instruksi tidak ada
KAndy

@ Otak ya itu, terima kasih. Mengedit pertanyaan saya untuk menunjukkan itu.
Kevin Chavez

Jawaban:


22

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.


@Alex Paliarush, bagaimana membuatnya bekerja ketika kunci keamanan diaktifkan.?
Aswanth

@Andanth Cukup tambahkan tindakan Anda ke menu, dan klik di atasnya. Dalam hal ini Magento akan menambahkan kunci keamanan yang tepat ke permintaan
Alex Paliarush

@AlexPaliarush Terima kasih Ini berfungsi untuk saya .. dan menghemat waktu saya
ZOE ATURAN

Ini adalah masalah tetapi mengapa kursus tidak mengatakan tentang kondisi ini dalam latihan? Saya kehilangan beberapa jam memeriksa ini ... Grrrrrrr
Binod - GoFundMonica

jawaban sempurna !!! +1 :) membuat hari saya
SagarPPanchal

12

Dalam router.xmlfile ( 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:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd">
    <router id="admin">
        <route id="asw_advanved" frontName="asw_advanved">
            <module name="Asw_Sample" before="Magento_Backend"/>
        </route>
    </router>
</config>

Berubah <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.
Adrian Moisa

4

Mungkin lebih baik menggunakan properti itu:

/**
 * Array of actions which can be processed without secret key validation
 *
 * @var array
 */
protected $_publicActions = ['action_name'];

2

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.

Cara Mematikan Validasi FormKey

(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:

class Index extends \Magento\Backend\App\Action
{
    protected $_publicActions = ['index'];

    public function execute()
    {
        echo "My Hello World! Controller";
    }

}

1

Masalah pengalihan rute dengan kunci keamanan diaktifkan adalah url tindakan yang diatur di menu.xml di bawah / etc / adminhtml /

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
    <menu>
        <add id="Mycompany_Mymodule::top_level" module="Mycompany_Mymodule" resource="Magento_Backend::content" sortOrder="9999" title="My Module" parent="Magento_Sales::sales"/>
        <add action="mycompany_mymodule/profile/index" id="Mycompany::mycompany_mymodule_profile" module="mycompany_Mymodule" parent="Mycompany_Mymodule::top_level" resource="Magento_Backend::content" sortOrder="9999" title="My Module"/>
    </menu>
</config>

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"

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="admin">
        <route frontName="mymodule" id="mycompany_mymodule">
            <module before="Magento_Backend" name="Mycompany_Mymodule"/>
        </route>
    </router>
</config>

0

<input name="form_key" type="hidden" value="<?php echo $block->escapeHtml($block->getFormKey()) ?>" /> akan membantu

tetapi Anda bisa menambahkan brickpoing ke vendor / magento / module-backend / App / AbstractAction.php

if (!$_isValidFormKey || !$_isValidSecretKey) {}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.