BLOG

El controlador en Magento y su estructura

Los controladores gestionan la lógica más básica del negocio, ante la solicitud del usuario determinan el módulo, la acción del controlador y el método de la acción que debe responder a la misma.

El siguiente diagrama explica de forma simplificada este proceso (Fuente: http://alanstorm.com):

controlador-magento

La estructura de una URL interna en Magento es https://user:password@host:443/base_path/[base_script][storeview_path]/route_name/controller_name/action_name/param1/value1?query_param=query_value

  • https://user:password@host:443/base_path/[base_script] – es el path dónde corre el script que instancia Magento (index.php normalmente).
  • [storeview_name] – código de la vista de tienda mostrada, existe dependiendo de la configuración.
  • route_name – router del controlador a buscar
  • controller_name – nombre del Action Controller, en caso de no existir su valor por defecto es “index”.
  • action_name – nombre de la acción o método del controlador

ROUTER

El “router” de un módulo se determina en el archivo de configuración confix.xml:

<frontend>
    <routers>
        <route_name>
            <use>standard</use>
            <args>
                <module>Module_name</module>
                <frontName>route_name</frontName>
            </args>
        </route_name>
    </routers>
</frontend>

<frontend> – determina el entorno en que esta “router” trabajará, en este caso sólo en el frontend, puede tomar el resto de valores de entorno de config.xml (global, …)

Existen 3 valores para la inclusión de un controlador <use></use>:

  • admin (class Mage_Core_Controller_Varien_Router_Admin): indica que el controlador funcionará en el entorno del backend. Como norma general no se crean nuevos router del panel de administración, se utiliza el router principal incluyendo nuevos controller name y action name, especialmente para evitar problemas de seguridad APPSEC-1034.
  • standard (class Mage_Core_Controller_Varien_Router_Standard): indica que el controlador funcionará en el entorno del frontend. Es el valor por defecto ante la asutencia de <use></use>.
  • default (class Mage_Core_Controller_Varien_Router_Default): indica el controlador por defecto para el admin y standard (identificando el entorno) ante la ausencia del route. Este controlador por defecto usa la configuración del panel “web/default/no_route” para el frontend y la ruta “core/index/index” para el backend. No suele utilizarse.

La etiqueta <args></args> tiene 2 elementos fundamentales:

  • module – módulo al que pertenece el controlador “Namespace_Module”
  • frontName – router del controlador

Al recibir una URL, la instancia de Magento carga el módulo Core y el controlador principal, que compara el “route_name” de la URL con los routers cargados en admin y standard, y en caso de coincidencia dispara el controlador del módulo coincidente para el procesamiento de la url.

Este proceso se encuentra en: Mage_Core_Controller_Varien_Front::dispatch()

$i = 0;
  while (!$request->isDispatched() && $i++ < 100) {
      foreach ($this->_routers as $router) {
          /** @var $router Mage_Core_Controller_Varien_Router_Abstract */
          if ($router->match($request)) {
              break;
          }
      }
  }

La función de comparación “match” realiza este proceso.

CONTROLLER_NAME Y ACTION NAME

Cuando el router coincide, se presta atención al siguiente parámetro controller_name, que identifica el nombre del controlador (1 archivo en concreto) y será buscado en la siguiente ruta:

app/code/local/Namespace/ModuleName/controllers/NameController.php
Dónde “action_name”, el tercer elemento, es el nombre del método a usar dentro del controlador. En caso de no existir “action_name” o “controller_name” se buscará en ambos casos el valor “index” por defecto (“indexAction” del “IndexController.php”):

app/code/local/Namespace/ModuleName/controllers/IndexController.php

Los controladores con generalidad extienden el controlador primario del que derivan: Mage_Core_Controller_Front_Action o Mage_Adminhtml_Controller_Action

Publicado

Categoría Controladores

Etiquetado como Magento 1.x mvc router