ماجنتو 2:هل يجب أن تحتوي منطقة "crontab" على ملف di.xml خاص بها
-
13-12-2019 - |
سؤال
هل ماجنتو 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
.