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?

Kevin Chavez
sumber
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
sumber
@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>
Sankar_k
sumber
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'];
Dewa Magento
sumber
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";
    }

}
Sharath Kumar
sumber
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>
Michelangelo
sumber
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) {}
Саша Осадчий
sumber