A blog about data, information and Tech by Mario Alberich

        

Magento: la clase Mage - Mage::app, Mage::run y otros métodos

Desde el punto de vista de una tienda de e-commerce, cada negocio es distinto y también sus políticas de distribución, métodos de pago, combinación de productos, ofertas, etc. No hay dos tiendas idénticas hasta en el más mínimo detalle, y para que una herramienta como Magento se pueda adaptar a cada a caso, es necesario proporcionar una base sólida y a la vez extensible.

Con ese objetivo, Magento trabaja con una estructura de módulos/extensiones que es en gran medida la clave del éxito para su adaptabilidad (y también es un riesgo, para qué negarlo). Combinado con esta flexibilidad, Magento también incorpora la clase Mage, que proporciona una serie de métodos estáticos que actúan como punto de acceso y ejecución de la aplicación.

Mage::app, Mage::init,Mage::run y Mage::reset

Mage::app($code = '', $type = 'store', $options = array())


En esencia retorna el objeto Mage_Core_Model_App, después de haber establecido el directorio raíz de Magento (Mage::setRoot()), y de haber ejecutado el método ::init() con los parámetros de contexto (código de sitio/tienda, tipo y opciones).

Mage::init($code = '', $type = 'store', $options = array(), $modules = array())


Permite inicializar la aplicación con las opciones facilitadas por ::app(), o bien añadir una lista de módulos que queremos inicializar específicamente. Esta segunda opción sólo tendrá propósitos de testeo o bien para ejecutarse en un contexto controlado. Para el resto de casos, es interesante delegar en ::app() o ::run()

Mage::run($code = '', $type = 'store', $options = array())


Esta es la llamada que puedes ver en el archivo index.php (el punto de acceso único a la aplicación), por lo que eso probablemente ya te dará una pista. Mage::run, a diferencia de los anteriores inicializa todo el contexto de frontend, con los objetos RequestResponse. Este método incluye las operaciones necesarias para que Magento empiece a procesar una petición

Si en algún momento quieres simular una petición a la aplicación, este método (junto con el contenido de index.php) te será de ayuda.

Mage::reset()


Devuelve todos los valores anteriores a su estado inicial. Para ser más concretos, el código de la función es:

    /**
* Set all my static data to defaults
*
*/
public static function reset()
{
self::$_registry = array();
self::$_appRoot = null;
self::$_app = null;
self::$_config = null;
self::$_events = null;
self::$_objects = null;
self::$_isDownloader = false;
self::$_isDeveloperMode = false;
self::$_isInstalled = null;
// do not reset $headersSentThrowsException
}

Es decir que tras un ::reset(), puedes empezar a ejecutar de nuevo una nueva petición a Magento. Este método es interesante para, por ejemplo, el testeo unitario (con PHPUnit, el método tearDown para limpiar el objeto Mage y lanzar la siguiente petición).

get/setRoot, getBaseDir y getModuleDir

Mage::getRoot() y Mage::setRoot($appRoot = '')


Son los métodos getter y setter para la propiedad estática Mage::$appRoot, que almacena el path hacia el directorio app de Magento. Si no se indica un valor en el caso del setter, se recoge el directorio real (utiliza la función realpath de PHP) en el que se encuentra el archivo Mage.php (que contiene la clase Mage).

El valor de Mage::$appRoot no será modificable via setter después de haber sido inicializado. No al menos utilizando el método setter.

Mage::getBaseDir($type='base')


Función de utilidad de acceso para obtener las rutas a los distintos directorios de Magento.  La función por sí misma llama a otras funciones dentro de la clase Mage_Core_Model_Config_Options, y lo que hace básicamente es:

  • Recoger el valor de $type, poner la primera letra en mayúscula y el resto en minúsculas (ucwords).
  • Comprobar si existe el método $this->get{Type}Dir() en la instancia de Mage_Core_Model_Config_Options.
  • En caso afirmativo, llama a esa función y devuelve el directorio solicitado. En caso contrario, lanza una excepción.


Echando un vistazo a esta clase, podemos ver la lista de tipos de directorios que podemos recuperar realizando una llamada a este método (getBaseDir, getCodeDir, getEtcDir, y hasta más de 15 métodos).

Mage::getModuleDir($type, $moduleName)


Análogo a Mage::getBaseDir() pero dirigida al módulo $moduleName, permite obtener la ruta completa hacia el subdirectorio $type (que puede tomar los valores 'etc', 'controllers', 'sql', 'data', o 'locale') de un módulo específico. A juzgar por el código del método, no se tiene en cuenta posibles reescrituras de componentes, ni si el módulo está activo o inactivo.

Mage::getVersionInfo, Mage::getVersion, Mage::getEdition


Ambas funciones proporcionan la información sobre la versión y edición de Magento. Esto es de especial interés para módulos que incorporen funcionalidades introducidas en versiones específicas de cada una de las ediciones (Community, Enterprise, Professional, o Go).

© 2007 and beyond Mario Alberich, licensed under CC-BY-SA unless stated otherwise.