Estou fazendo o curso de desenvolvimento dos fundamentos do Magento 2 e o exercício Admin Router / Controller parece desatualizado. O roteador funciona, mas o controlador não, sempre apenas redireciona para a página inicial do administrador. Código do aplicativo roteador / code / Training / Test / 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>
Código para o aplicativo Admin controller / code / Training / Test / Controller / Adminhtml / Action / 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;
}
}
Quando eu vou para o URL de administração de admin / test / action / index, ele apenas redireciona e nada acontece. Se eu adicionar um construtor e usar o xdebug, ele mostra que atinge o construtor do controlador, mas nunca executa a parte de execução. o que estou perdendo?
Respostas:
Isso acontece porque falta 'chave secreta' quando você digita o URL manualmente. Recurso de chave secreta é ativado por padrão e pode ser desativado aqui:
Stores => Configuration => Advanced => Admin => Security => Add Secret Key to URLs
. Então você deve conseguir alcançar sua ação.fonte
No
router.xml
arquivo (companyName/customModule/etc/adminhtml/router.xml
), para mim, a solução era ter o ID da rota e o frontName com o mesmo valor. No seu caso, isso seria:fonte
<route id="Bmanager" frontName="bmanager">
para<route id="bmanager" frontName="bmanager">
e agora eu posso fazer um trabalho básico controlador como descrito no corpo pergunta. Ainda sem sorte com meus controladores personalizados. Edit: Na verdade, um dos meus controladores personalizados começou a dar alguns erros. Muito melhor do que redirecionar sem erros.Talvez seja melhor usar essa propriedade:
fonte
Ao tentar acessar os módulos / funcionalidades no back-end (Adminhtml), o Magento verifica a presença do segredo
Form Keys
e se / quando alguém tenta acessar uma ação e não fornece uma FormKey (por exemplo: hotlinking o URL) e / ou fornece uma FormKey inválida - o Adminhtml AbstractAction (Magento \ Backend \ App \ AbstractAction) encaminhará a página de inicialização definida pelo Admin UIX do usuário (que geralmente é a página do painel)[Esse mecanismo serve como um "ponto de verificação de segurança" para impedir que os usuários acessem partes do back-end aos quais não têm acesso]
Ao acessar opções no menu Admin UIX - o Magento adicionará automaticamente o FormKey para você.
Para impedir a verificação do FormKey, você tem duas opções:
(a) Desativar a validação do FormKey
Navegação: Lojas -> Configurações: Configuração -> Avançado: Admin -> Segurança -> Configuração "Adicionar Chave Secreta aos URLs" para "Não"
É muito importante lembrar que isso desativará a validação de chave secreta e, portanto, poderá tornar seu aplicativo vulnerável.
(b) Desative a Validação do FormKey para seu controlador
Especifique as ações que você deseja isentar, da verificação FormKey, no atributo "$ _publicActions" do seu Admin Controller.
protected $ _publicActions = ['ENTER_NAME_OF_ACTION'];
Exemplo de código:
fonte
O problema do redirecionamento de roteamento com a chave de segurança ativada é o URL da ação definido no menu.xml em / etc / adminhtml /
O valor importante é o parâmetro de ação no item de menu. Preste atenção para definir o nome do módulo declarado no routes.xml no parâmetro id. No meu caso: "mycompany_mymodule"
fonte
<input name="form_key" type="hidden" value="<?php echo $block->escapeHtml($block->getFormKey()) ?>" />
vai ajudarmas você pode adicionar um brickpoing ao fornecedor / magento / module-backend / App / AbstractAction.php
fonte