Magento 2: ¿Cómo obtener el nombre del controlador, módulo, acción y enrutador?

Respuestas:

33

Use el siguiente código en la clase de controlador para obtener el controlador, módulo, acción y nombre de ruta:

<?php
    namespace Custom\Module\Controller\Index;

class Index extends \Magento\Framework\App\Action\Action
{
    protected $request;

    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\App\Request\Http $request
    ){
        parent::__construct($context);
        $this->request = $request;
    }

    public function execute()
    {
        $moduleName = $this->request->getModuleName();
        $controller = $this->request->getControllerName();
        $action     = $this->request->getActionName();
        $route      = $this->request->getRouteName();

        echo $moduleName."<br/>";
        echo $controller."<br/>";
        echo $action."<br/>";
        echo $route."<br/>";

        $this->_view->loadLayout();
        $this->_view->renderLayout();
    }
}
Manashvi Birla
fuente
hola @ Manashvi, ¿podemos obtener el nombre del controlador y la acción de referralUrl?
jafar pinjar
14

para obtener el phtmlarchivo o controllerusar a continuación

echo $controllerName = $this->getRequest()->getControllerName();
echo $actionName = $this->getRequest()->getActionName();
echo $routeName = $this->getRequest()->getRouteName();
echo $moduleName = $this->getRequest()->getModuleName(); 
Qaisar Satti
fuente
¿Cómo puedo obtener la acción del controlador de la página de inicio para establecer un observador?
supriya mishra
si prueba este código, saldrá para la página de inicio, controller:index,action:index,route:cms,module:cmsespero que esto ayude.
Qaisar Satti
@QaisarSatti, ¿podemos obtener el nombre del controlador y la acción de la URL de referencia? $ this-> redirect-> getRefererUrl ();
jafar pinjar
5

Utilice los fragmentos de código a continuación para phtml, controlador y eventos en magento 2

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$requestInterface = $objectManager->get('Magento\Framework\App\RequestInterface');

$routeName      = $requestInterface->getRouteName();
$moduleName     = $requestInterface->getModuleName(); 
$controllerName = $requestInterface->getControllerName(); 
$actionName     = $requestInterface->getActionName();
Arun Prabhu
fuente
3
No debe crear una instancia ObjectManagerdirectamente. Debe inyectar las clases / objetos necesarios a través de DI.
7ochem
4

También puedes hacer:

$this->_requestInterface->getFullActionName()

Para obtener el nombre completo de la acción

Maxime Huran
fuente
1

Puede obtener esta información del objeto de solicitud.

Ejemplo

En tu controllerclase:

$routeName        = $this->getRequest()->getRouteName();
$moduleName       = $this->getRequest()->getModuleName();
$controllerName   = $this->getRequest()->getControllerName();
$actionName       = $this->getRequest()->getActionName();

Espero que esto sea de ayuda.

Shyam
fuente