Estoy tomando el curso de desarrollo de fundamentos de Magento 2 y el ejercicio Admin Router / Controller parece desactualizado. El enrutador funciona, pero el controlador no, siempre se redirige a la página de inicio del administrador. Código para la aplicación del enrutador / 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 la aplicación del controlador de administración / 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;
}
}
Cuando voy a la URL de administración de admin / test / action / index, simplemente se redirige y no sucede nada. Si agrego un constructor y uso xdebug, muestra que llega al constructor del controlador, pero nunca hace la parte de ejecución. ¿Qué me estoy perdiendo?
Respuestas:
Esto sucede porque falta la 'clave secreta' cuando escribe la URL manualmente. Característica clave secreta está activada de forma predeterminada y se puede desactivar aquí:
Stores => Configuration => Advanced => Admin => Security => Add Secret Key to URLs
. Entonces deberías poder alcanzar tu acción.fuente
En el
router.xml
archivo (companyName/customModule/etc/adminhtml/router.xml
) Para mí, la solución era hacer que la identificación de la ruta y el nombre frontal tengan el mismo valor. En su caso esto sería:fuente
<route id="Bmanager" frontName="bmanager">
a<route id="bmanager" frontName="bmanager">
y ahora puedo hacer que un controlador básico funcione como se describe en el cuerpo de la pregunta. Todavía no tuve suerte con mis controladores personalizados. Editar: en realidad, uno de mis controladores personalizados comenzó a dar algunos errores. Mucho mejor que redirigir sin errores.Quizás sea mejor usar esa propiedad:
fuente
Al intentar acceder a los módulos / funciones en el backend (Adminhtml), Magento comprueba la presencia del secreto
Form Keys
, y si / cuando alguien intenta acceder a una acción y no proporciona una FormKey (p. Ej .: vincular la URL) y / o proporciona una clave de formulario no válida: Adminhtml AbstractAction (Magento \ Backend \ App \ AbstractAction) enrutará la página de inicio definida por el usuario Admin UIX (que generalmente es la página del panel)[Este mecanismo sirve como un "punto de control de seguridad" para evitar que los usuarios accedan a partes del Backend a las que no tienen acceso]
Al acceder a las opciones desde el menú Admin UIX, Magento agregará automáticamente la FormKey por usted.
Para evitar la verificación de FormKey, tiene dos opciones:
(a) Desactive Validación de FormKey
Navegación: Tiendas -> Configuración: Configuración -> Avanzado: Administrador -> Seguridad -> Configuración "Agregar clave secreta a URL" a "No"
Es muy importante recordar que hacerlo desactivará la Validación de clave secreta y, por lo tanto, puede hacer que su aplicación sea vulnerable.
(b) Desactive Validación de FormKey para su controlador
Especifique las acciones que desea eximir, de la verificación FormKey, en el atributo "$ _publicActions" de su controlador de administración.
protected $ _publicActions = ['ENTER_NAME_OF_ACTION'];
Ejemplo de código:
fuente
El problema de la redirección de enrutamiento con la clave de seguridad habilitada es la acción url establecida en menu.xml en / etc / adminhtml /
El valor importante es el parámetro de acción en el elemento del menú. Preste atención para establecer el nombre del módulo declarado en routes.xml en el parámetro id. En mi caso: "mycompany_mymodule"
fuente
<input name="form_key" type="hidden" value="<?php echo $block->escapeHtml($block->getFormKey()) ?>" />
ayudarápero podría agregar un brickpoing a vendor / magento / module-backend / App / AbstractAction.php
fuente