Magento 2، يقوم مدير الكائنات بتمرير كائن آخر غير المتوقع، لماذا؟

magento.stackexchange https://magento.stackexchange.com/questions/101456

سؤال

فقط عندما أعتقد أنني أفهم مدير كائنات Magento 2 وحقن التبعية، يحدث شيء لا أفهمه.أعتقد أنني أمر context أون pagefactory الأشياء ولكن ماجنتو يقول أنني لست كذلك.والثاني يبدو خاطئا.

Recoverable Error: Argument 2 passed to Demo\Hello\Controller\Adminhtml\Order\MassPrint::__construct() must be an instance of Magento\Framework\View\Result\PageFactory, instance of Magento\Framework\App\ResourceConnection given, called in 

المتحكم:

<?php 
namespace Demo\Hello\Controller\Adminhtml\Order;

use Magento\Backend\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;

class MassPrint extends \Magento\Backend\App\Action {

  public function __construct(Context $context, PageFactory $pageFactory) {
    parent::__construct($context);
  }

}

إنه يفهم نوع التلميح كما أريد:

must be an instance of Magento\Framework\View\Result\PageFactory

لكنه يمر

instance of Magento\Framework\App\ResourceConnection given

لماذا هذا؟هناك بعض السحر الذي يحدث مع Magento والذي لا أفهمه (حتى الآن).

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

المحلول

ليرة تركية؛ د

إذا رأيت خطأً في Interceptor.php تأكد من إفراغ /var/generation/ قبل أن تنظر إلى أبعد من ذلك.سيوفر لك الكثير من الوقت.

توضيح

بعد بعض الاختبارات وجدت السبب الكامن وراء ذلك.عند تنفيذ وحدة تحكم مخصصة لأول مرة، يقوم Magento بإنشاء الملفات تلقائيًا.حتى الان جيدة جدا.في حالتي واحدة فقط.انها تعيش في var\generation\ المسار الكامل في هذا المثال سيكون var\generation\Demo\Hello\Controller\Adminhtml\Order\MassPrint\Interceptor.php.

تعمل هذه الفئة على توسيع وحدة التحكم المخصصة الخاصة بك.لذا فمن الطبيعي أن يتم استدعاء المُنشئ الأصلي في المُنشئ الخاص به.لذا، إذا قمت بإجراء تغييرات على مُنشئ وحدة التحكم الخاصة بك، فيجب إعادة إنشاء هذا الملف ليتوافق مع التعليمات البرمجية الجديدة.إذا لم تفعل ذلك سوف تسفر عن نتائج غير مرغوب فيها.لذا تأكد على الأقل من حذف فئة Interceptor لوحدة التحكم هذه.سيكون من الأسهل إفراغ المخرج بالكامل حتى يقوم Magento بإعادة إنشاء جميع الملفات المطابقة للكود الجديد.

rm -rf var/generation/*

في الواقع، يعطي الماجنتو فكرة جيدة جدًا عن مكان البحث في الجزء الأخير من رسالة الخطأ.

called in /var/generation/Demo/Hello/Controller/Adminhtml/Order/MassPrint/Interceptor.php on line 15
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top