سؤال

هل ماجنتو 2 crontab منطقة تحميل نطاق di.xml ملف؟أم أن هذا لم يعد يستخدم؟أو يجب يمكن استخدامه، ولكن لا يتم تحميله كجزء من crontab التطبيق هو الخلل؟أو هل أسيء فهم شيء ما بشكل أساسي؟

في Magento 2، تسمح لك ميزة "المناطق" بتحميل معلومات تكوين إضافية بناءً على سياق الطلب (وهذا أمر متموج قليلاً، ولكنه دقيق من وجهة نظر معينة).

على سبيل المثال، سوف الماجنتو دائماً تحميل ما يلي di.xml

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

ولكن سيتم تحميل ما يلي فقط di.xml عندما تكون في منطقة الواجهة الأمامية

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

ليس من الواضح ما إذا كان هذا صحيحًا بالنسبة لـ di.xml ملفات ل crontab منطقة.

إن cron runner في Magento هو تطبيق نظام Magento منفصل عن تطبيق نظام Magento الذي يتعامل مع طلبات HTTP.عند تشغيل تطبيق cron، يكون تطبيق نظام Magento الخاص به قليلًا جدًا 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;
}

يمكنك رؤية المكالمة إلى setAreaCode أين ال crontab تم تعيين رمز المنطقة.وهذا يضمن دمج طلبات أشجار التكوين في أي تكوين موجود في الوحدة النمطية etc/crontab مجلد

app/etc/crontab/*.xml

لكن -- di.xml مختلف / خاص.نظرًا لأن Magento يحتاج إلى الوصول إلى مدير الكائنات قبل تشغيل تطبيق نظام Magento، يقوم مدير الكائنات في البداية بتحميل كافة العناصر etc/di.xml الملفات قبل الاتصال بـ setAreaCode.

خلال HTTP طلب تطبيق نظام ماجنتو (Magento\Framework\App\Http) يقوم بتحميل المنطقة المحددة di.xml الملفات بعد تحديد رمز المنطقة

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

منذ هذه الدعوة إلى configure مفقود من تطبيق cron launch الطريقة، ذلك يبدو مثل ال crontab لا يقوم بتحميل أي etc/crontab/di.xml ملفات.ومع ذلك، هناك عدد قليل etc/crontab/di.xml الملفات موجوده

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

وهذا يخلق بعض الالتباس حول السلوك الصحيح للنظام.هل كان أي شخص هنا يتابع تطوير Magento 2 عن كثب بما يكفي لمعرفة السلوك الصحيح للنظام؟

هل كانت مفيدة؟

المحلول

بناءً على التعليقات الواردة من الفريق الأساسي، يبدو أن السلوك الحالي هو كذلك لا السلوك المقصود، وفي الإصدارات المستقبلية سيتم تحميل تطبيق crontab في منطقة crontab di.xml.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top