Emulación de áreas y stores en Magento

por David Abad
Magento: Emulación stores y areas

Algunas tareas de Magento como el envío de correos, la gestión de clientes, el tratamiento de pedidos, etc. necesitan ser lanzadas desde el scope de una tienda concreta, por lo que a veces se requiere la emulación de áreas desde nuestro código, especialmente en la implementación de cron jobs y comandos CLI personalizados. 

Áreas de ejecución

Las áreas de ejecución de Magento son un recurso utilizado para definir e identificar el punto de entrada de cada ejecución de código (petición web, petición API, comandos, etc.). Estas áreas pueden servir para organizar y optimizar el código, permitiendo cargar únicamente el código necesario en cada caso, así como segmentar la lógica de la aplicación según el punto de entrada de cada petición.

Las áreas definidas en Magento son:

  • adminhtml
  • frontend
  • base
  • crontab
  • webapi_rest
  • webapi_soap
  • graphql

Emulación de áreas y stores

En ciertas implementaciones es necesario emular áreas y stores concretas para lanzar determinadas tareas.

Esta emulación es necesaria ya que, por ejemplo en el envío de un correo electrónico, es necesario conocer la store con la que se quiere trabajar para obtener el tema asociado, del que se obtendrán las plantillas y estilos a aplicar en los emails. 

El siguiente código muestra como emular el área frontend para una store concreta:

<?php

namespace [...];

use Magento\Framework\App\State;
use Magento\Store\Model\App\Emulation;
use Magento\Framework\App\Area;

class MiCodigo
{
    public function __construct(
        protected State $state,
        protected Emulation $emulation
    ) {}

    public function execute()
    {
        $storeId = 1;
        $this->state->setAreaCode(Area::AREA_FRONTEND);
        $this->emulation->startEnvironmentEmulation($storeId, Area::AREA_FRONTEND, true);

        // TODO
        
        $this->emulation->stopEnvironmentEmulation();
    }
}

Déjanos tu email para recibir contenido interesante en tu bandeja de entrada, cada mes.

¡No hacemos spam!

Otros artículos