Biorę kurs rozwoju Magento 2, a ćwiczenie Router / Kontroler Admin wydaje się nieaktualne. Router działa, ale kontroler nie, zawsze po prostu przekierowuje na stronę główną administratora. Kod aplikacji routera / code / Training / Test / etc / adminhtml / tras.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>
Kod aplikacji kontrolera administracyjnego / kodu / szkolenia / testu / kontrolera / administratora / działania / indeksu.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;
}
}
Kiedy przechodzę do adresu administratora admin / test / action / index, po prostu przekierowuje i nic się nie dzieje. Jeśli dodam konstruktor i użyję xdebug, to pokazuje, że osiąga konstruktor kontrolera, ale nigdy nie wykonuje części wykonawczej. czego mi brakuje?
Odpowiedzi:
Dzieje się tak, ponieważ podczas ręcznego wpisywania adresu URL brakuje „tajnego klucza”. Tajny klucz funkcja jest domyślnie włączona i tutaj może być wyłączone:
Stores => Configuration => Advanced => Admin => Security => Add Secret Key to URLs
. Wtedy powinieneś być w stanie osiągnąć swoje działanie.źródło
W
router.xml
pliku (companyName/customModule/etc/adminhtml/router.xml
) Dla mnie rozwiązaniem było, aby identyfikator trasy i nazwa przednia miały tę samą wartość. W twoim przypadku byłoby to:źródło
<route id="Bmanager" frontName="bmanager">
na<route id="bmanager" frontName="bmanager">
i teraz mogę sprawić, aby podstawowy kontroler działał zgodnie z opisem w treści pytania. Nadal nie mam szczęścia z moimi niestandardowymi kontrolerami. Edycja: Właściwie jeden z moich niestandardowych kontrolerów zaczął dawać błędy. Znacznie lepsze niż przekierowanie bez błędów.Może lepiej użyć tej właściwości:
źródło
Podczas próby uzyskania dostępu do modułów / funkcji w backendie (Adminhtml), Magento sprawdza obecność tajnego klucza
Form Keys
i czy / kiedy ktoś próbuje uzyskać dostęp do akcji i nie dostarcza klucza FormKey (np .: hotlinkowanie adresu URL) i / lub dostarcza nieprawidłowy klawisz FormKey - Adminhtml AbstractAction (Magento \ Backend \ App \ AbstractAction) przekieruje zdefiniowaną przez użytkownika stronę startową Admin UIX (zwykle jest to strona Dashboard)[Ten mechanizm służy „punktowi kontroli bezpieczeństwa”, aby uniemożliwić użytkownikom dostęp do części Backend, do których nie mają dostępu]
Podczas uzyskiwania dostępu do opcji z menu Administrator UIX - Magento automatycznie doda dla ciebie FormKey.
Aby zapobiec sprawdzaniu FormKey, masz dwie opcje:
(a) Wyłącz FormKey Validation
Nawigacja: Sklepy -> Ustawienia: Konfiguracja -> Zaawansowane: Administrator -> Bezpieczeństwo -> Ustawienia „Dodaj tajny klucz do adresów URL” na „Nie”
Bardzo ważne jest, aby pamiętać, że spowoduje to wyłączenie sprawdzania poprawności tajnego klucza, a zatem może narazić twoją aplikację na niebezpieczeństwo.
(b) Wyłącz FormKey Validation dla swojego kontrolera
Podaj działania, które chcesz zwolnić, z kontroli FormKey, w atrybucie „$ _publicActions” swojego administratora.
protected $ _publicActions = ['ENTER_NAME_OF_ACTION'];
Przykład kodu:
źródło
Problemem przekierowania routingu z włączonym kluczem bezpieczeństwa jest adres URL akcji ustawiony w menu.xml w / etc / adminhtml /
Ważną wartością jest parametr akcji w pozycji menu. Zwróć uwagę na ustawienie nazwy modułu zadeklarowanego w pliku route.xml w parametrze id. W moim przypadku: „mojafirma_mymoduł”
źródło
<input name="form_key" type="hidden" value="<?php echo $block->escapeHtml($block->getFormKey()) ?>" />
pomożeale możesz dodać brickpoing do vendor / magento / module-backend / App / AbstractAction.php
źródło