Question

Est-ce que Magento 2 crontab zone charger une portée di.xml déposer?Ou cela n'est plus utilisé ?Ou devrait il peut être utilisé, mais il n'est pas chargé dans le cadre du crontab l'application est un bug ?Ou est-ce que j'ai fondamentalement mal compris quelque chose ?

Dans Magento 2, la fonctionnalité "zones" vous permet de charger des informations de configuration supplémentaires en fonction du contexte de la requête (c'est un peu ondulé, mais précis d'un certain point de vue).

Par exemple, Magento va toujours charger ce qui suit di.xml

./vendor/magento/module-tax/etc/di.xml

mais ne chargera que ce qui suit di.xml quand je suis dans la zone frontale

./vendor/magento/module-tax/etc/frontend/di.xml

Il n'est pas clair si cela est vrai pour le di.xml fichiers pour le crontab zone.

Le coureur cron dans Magento est une application système Magento distincte de l'application système Magento qui gère les requêtes HTTP.Lorsque l'application cron est lancée, son application système Magento a un minimum de 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;
}

Vous pouvez voir l'appel à setAreaCode où le crontab l'indicatif régional est défini.Cela garantit que les demandes d'arborescences de configuration fusionneront dans n'importe quelle configuration située dans le répertoire d'un module. etc/crontab dossier

app/etc/crontab/*.xml

Cependant -- di.xml est différent/spécial.Étant donné que Magento a besoin d'accéder au gestionnaire d'objets avant le lancement de l'application système Magento, le gestionnaire d'objets charge initialement tous les fichiers. etc/di.xml fichiers avant l'appel à setAreaCode.

Lors d'une HTTP demande, l'application système Magento (Magento\Framework\App\Http) charge la zone spécifique di.xml fichiers après avoir défini l'indicatif régional

#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));
    //...
}

Depuis cet appel à configure est absent de l'application cron launch méthode, il semble comme le crontab ne charge rien etc/crontab/di.xml des dossiers.Il existe cependant quelques etc/crontab/di.xml fichiers présents.

$ find . -wholename '*crontab/di.xml'
./vendor/magento/module-captcha/etc/crontab/di.xml
./vendor/magento/module-catalog-rule-configurable/etc/crontab/di.xml

Cela crée une certaine confusion quant au comportement correct du système.Quelqu'un ici a-t-il suivi le développement de Magento 2 d'assez près pour savoir quel est le comportement correct du système ?

Était-ce utile?

La solution

D'après les commentaires de l'équipe principale, il semble que le comportement actuel soit pas le comportement prévu, et dans les versions futures, l'application crontab se chargera dans une zone crontab di.xml.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top