Magento 2 Özel Yönetici İşlemi Gösterge Tablosuna Yeniden Yönlendirildi


18

Magento 2 temel geliştirme kursunu alıyorum ve Yönetici Yönlendirici / Denetleyici alıştırması güncel değil. Yönlendirici çalışıyor, ancak denetleyici çalışmıyor, her zaman yönetici ana sayfasına yeniden yönlendirilir. Yönlendirici uygulaması / kodu / Eğitim / Test / etc / adminhtml / route.xml kodu :

<?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>

Yönetici denetleyicisi uygulaması / kodu / Eğitim / Test / Denetleyici / Adminhtml / Action / Index.php kodu :

<?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;
    }
}

Ben admin / test / action / index admin url'sine gittiğimde sadece yönlendirir ve hiçbir şey olmaz. Bir kurucu ekleyip xdebug kullanırsam, denetleyici kurucusuna ulaştığını gösterir, ancak hiçbir zaman yürütme parçasını yapmaz. Neyi kaçırıyorum?


Umarım kod fonksiyonunuzda _isAllowed return true. Örneğin "dönüş" talimatı yok
KAndy

@KAndy evet öyle, teşekkürler. Bunu göstermek için sorumu düzenledim.
Kevin Chavez

Yanıtlar:


22

Bunun nedeni, URL'yi manuel olarak girdiğinizde 'gizli anahtar' eksik olmasıdır. Gizli anahtar özellik varsayılan olarak etkindir ve burada devre dışı bırakılabilir: Stores => Configuration => Advanced => Admin => Security => Add Secret Key to URLs. O zaman eyleminize ulaşabilmelisiniz.


@Alex Paliarush, güvenlik anahtarları etkinleştirildiğinde bu nasıl çalışır?
Aswanth

@Aswanth Sadece eyleminizi menüye ekleyin ve üzerine tıklayın. Bu durumda Magento isteğe uygun güvenlik anahtarı ekleyecek
Alex Paliarush

@AlexPaliarush Teşekkürler Benim için çalışıyor .. ve zamanımı kurtardı
ZOE RULE

Sorun buydu ama kurs neden egzersizdeki bu durum hakkında söylemiyor? Ben grrrrrrr ... Bu denetleme birkaç saat kaybetti
GoFundMonica - Binod

mükemmel cevap!!! +1 :) made my day
SagarPPanchal

12

Gelen router.xmldosya ( companyName/customModule/etc/adminhtml/router.xmlBenim için) çözümü rota kimliğe sahip oldu ve frontName aynı değere sahiptir. Sizin durumunuzda:

<?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>

Değişti <route id="Bmanager" frontName="bmanager">için <route id="bmanager" frontName="bmanager">ve soru vücudu açıklandığı gibi şimdi bir temel kontrolör uygulayabiliriz. Özel denetleyicilerimle hala şans yok. Düzenleme: Aslında benim özel denetleyicilerimden biri bazı hatalar vermeye başladı. Hiçbir hata olmadan yönlendirmeden çok daha iyi.
Adrian Moisa

4

Belki de bu özelliği kullanmak daha iyidir:

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

2

Arka uçtaki modüllere / işlevlere erişmeye çalışırken (Adminhtml), Magento sırrın varlığını Form Keysve birisinin bir eyleme erişmeye çalışıp çalışmadığı ve FormKey (örneğin: URL'yi hotlinking) ve / veya Geçersiz FormKey sağlar - Adminhtml AbstractAction (Magento \ Backend \ App \ AbstractAction), kullanıcının Yönetici UIX'in tanımlı Başlangıç ​​sayfasını (genellikle Gösterge Tablosu sayfasıdır) yönlendirir

[Bu mekanizma, kullanıcıların arka ucun erişemedikleri bölümlerine erişmesini önlemek için bir "güvenlik kontrol noktası" sunar]


Yönetici UIX Menüsü'nden seçeneklere erişirken - Magento otomatik olarak FormKey'i sizin için ekleyecektir.


FormKey denetimini önlemek için iki seçeneğiniz vardır:

(a) FormKey Doğrulamasını Kapat

Gezinme: Mağazalar -> Ayarlar: Yapılandırma -> Gelişmiş: Yönetici -> Güvenlik -> "URL'lere Gizli Anahtar Ekle" yi "Hayır" olarak ayarlayın

Bu sayede bu nedenle Gizli Anahtar Doğrulama kapatın ve unutmayın çok önemlidir olabilir etkilenmesine neden.

FormKey Doğrulaması Nasıl Kapatılır

(b) Denetleyiciniz için FormKey Doğrulamasını kapatın

Muaf etmek istediğiniz işlemleri Yönetici Denetleyicinizin "$ _publicActions" özelliğinde FormKey denetiminden belirtin.

korumalı $ _publicActions = ['ENTER_NAME_OF_ACTION'];

Kod Örneği:

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

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

}

1

Güvenlik anahtarı etkin durumdayken yönlendirme yönlendirmesi sorunu, / etc / adminhtml / altında menu.xml dosyasında ayarlanan işlem URL'sidir.

<?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>

Önemli değer, menü öğesindeki eylem parametresidir. Route.xml dosyasına bildirilen modülün adını id parametresine ayarlamaya dikkat edin. Benim durumumda: "şirketim_modül"

<?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()) ?>" /> yardım edecek

ancak satıcıya / magento / module-backend / App / AbstractAction.php dosyasına bir tuğla duvar ekleyebilirsiniz.

if (!$_isValidFormKey || !$_isValidSecretKey) {}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.