Magento 2:¿Tiene y debería tener el área `crontab` su propio di.xml?
-
13-12-2019 - |
Pregunta
¿Magento 2? crontab
carga de área con alcance di.xml
¿archivo?¿O esto ya no se usa?O debería se puede utilizar, pero no se carga como parte del crontab
¿La aplicación es un error?¿O es que entiendo algo fundamentalmente mal?
En Magento 2, la función "áreas" le permite cargar información de configuración adicional según el contexto de la solicitud (eso es un poco ondulado, pero preciso desde cierto punto de vista).
Por ejemplo, Magento siempre carga lo siguiente di.xml
./vendor/magento/module-tax/etc/di.xml
pero solo cargará lo siguiente di.xml
cuando en el área frontal
./vendor/magento/module-tax/etc/frontend/di.xml
No está claro si esto es cierto para el di.xml
archivos para el crontab
área.
El corredor cron en Magento es una aplicación del sistema Magento separada de la aplicación del sistema Magento que maneja las solicitudes HTTP.Cuando se inicia la aplicación cron, su aplicación del sistema Magento tiene un mínimo launch
#File: vendor/magento/framework/App/Cron.php
public function launch()
{
$this->_state->setAreaCode('crontab');
$this->_eventManager->dispatch('default');
$this->_response->setCode(0);
return $this->_response;
}
Puedes ver la convocatoria a setAreaCode
donde el crontab
El código de área está configurado.Esto garantiza que las solicitudes de árboles de configuración se fusionarán en cualquier configuración ubicada en el directorio de un módulo. etc/crontab
carpeta
app/etc/crontab/*.xml
Sin embargo -- di.xml
es diferente/especial.Debido a que Magento necesita acceso al administrador de objetos antes del inicio de la aplicación del sistema Magento, el administrador de objetos inicialmente carga todos los etc/di.xml
archivos antes de la llamada a setAreaCode
.
durante un HTTP solicitud, la aplicación del sistema Magento (Magento\Framework\App\Http
) carga el área específica di.xml
archivos después de configurar el código de área
#File: vendor/magento/framework/App/Http.php
public function launch()
{
$areaCode = $this->_areaList->getCodeByFrontName($this->_request->getFrontName());
$this->_state->setAreaCode($areaCode);
$this->_objectManager->configure($this->_configLoader->load($areaCode));
//...
}
Desde este llamado a configure
falta en la aplicación cron launch
método, es parece como el crontab
no carga ninguno etc/crontab/di.xml
archivos.Sin embargo, hay algunos etc/crontab/di.xml
archivos presentes.
$ find . -wholename '*crontab/di.xml'
./vendor/magento/module-captcha/etc/crontab/di.xml
./vendor/magento/module-catalog-rule-configurable/etc/crontab/di.xml
Esto crea cierta confusión sobre cuál debería ser el comportamiento correcto del sistema.¿Alguien aquí ha seguido el desarrollo de Magento 2 lo suficientemente de cerca como para saber cuál es el comportamiento correcto del sistema?
Solución
Según los comentarios del equipo central, parece que el comportamiento actual es no el comportamiento previsto y, en versiones futuras, la aplicación crontab se cargará en el área de crontab di.xml
.