Magento 2 - ตัวจัดการวัตถุพยายามยกระดับบทคัดย่อ ( ข้อผิดพลาดร้ายแรง )


37

เล่นกับ Magento 2 แต่เจอปัญหาฉันไม่สามารถห่อหัวของฉัน ตัวจัดการวัตถุพยายามสร้างอินสแตนซ์ของคลาสนามธรรมซึ่งทำให้เกิดข้อผิดพลาดร้ายแรง มีใครรู้บ้างว่าอะไรทำให้เกิดสิ่งนี้หรือชี้ให้ฉันไปในทิศทางที่ถูกต้อง?

ข้อผิดพลาด

Fatal error: Cannot instantiate abstract class Magento\Framework\Model\Resource\AbstractResource in /lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php on line 75

ปัญหา

\Magento\Quote\Model\Quoteโมดูลของฉันมีรูปแบบที่ขยายได้ คอนสตรัคของรุ่นนี้มีสายฉีดดังต่อไปนี้:

\Magento\Framework\Model\Resource\AbstractResource $resource = null,.

คอนโทรลเลอร์ที่กำลังสร้างโมเดลนั้นขยาย\Magento\Backend\App\Actionและใช้$this->_objectManager->create()เพื่อสร้างอินสแตนซ์ของโมเดล

สิ่งที่ฉันไม่สามารถห่อหัวของฉันไปรอบ ๆ คือถ้าฉันยกตัวอย่างรูปแบบวีโอไอพีมันก็ใช้งานได้ แต่ถ้าฉันสร้างแบบจำลองของฉันมันพยายามที่จะยกตัวอย่างระดับนามธรรมนี้โยนข้อผิดพลาดข้างต้น อะไรบอกให้ผู้จัดการวัตถุทำสิ่งนี้และฉันจะแก้ปัญหาได้อย่างไร

ความคิดแรกของฉันคือ Magento ใช้di.xmlเพื่อแทนที่สิ่งนี้ดำเนินการหรือบางสิ่งบางอย่างนี่ไม่ใช่กรณี

ขอบคุณที่สละเวลาอ่านข้อความนี้ ความช่วยเหลือหรือข้อมูลใด ๆ เกี่ยวกับปัญหานี้ได้รับการชื่นชม


คุณสามารถโพสต์รหัสของคุณในคำถามได้หรือไม่
Marius

บางทีคุณอาจจะเจาะจงมากกว่านี้หน่อยได้ไหม? คลาสคอนโทรลเลอร์ทั้งหมดและโมเดลอินสแตนซ์มีขนาดใหญ่มากและการเพิ่มลงในคำถามไม่ได้ทำให้ง่ายต่อการเข้าใจปัญหาเริ่มต้น ฟังก์ชั่นการกระทำหรือตัวสร้างจะเพียงพอหรือไม่
rofavadeka

ยุติธรรมพอสมควร โพสต์ชื่อชั้นเรียนของคุณสิ่งที่มันขยายสิ่งที่ดำเนินการและ__constructวิธีการแบบจำลองของคุณ
Marius

ตามที่ร้องขอ :) ส่วนบนของแบบจำลอง ฉันคิดว่า Chris มีวิธีแก้ปัญหาลองทดสอบและกลับไปหาคุณ ขอบคุณ Marius
rofavadeka

อ๋อ ฉันคิดว่าคริสเข้าใจแล้ว :)
Marius

คำตอบ:


109

สิ่งนี้สามารถเกิดขึ้นได้หากคลาสย่อยของคุณเพิ่มการอ้างอิงใหม่หลังจากการอ้างอิงทางเลือกที่มีอยู่ของคลาสพาเรนต์

ตัวอย่างจากผู้ปกครอง

    \Magento\Quote\Model\Cart\CurrencyFactory $currencyFactory,  // required
    JoinProcessorInterface $extensionAttributesJoinProcessor,    // required
    \Magento\Framework\Model\Resource\AbstractResource $resource = null,       //optional
    \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,  //optional
    array $data = [] //optional
)}

รหัสอาจเปลี่ยนสิ่งที่เป็นตัวเลือกได้อย่างไร

    \Magento\Quote\Model\Cart\CurrencyFactory $currencyFactory,  // required
    JoinProcessorInterface $extensionAttributesJoinProcessor,    // required
    \Magento\Framework\Model\Resource\AbstractResource $resource = null,       // required (even though it has a default value, because it is followed by parameters that don't have default values)
    int $x, // required
    \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,  // optional (still optional because there are no required parameters following it)
    array $data = [] // optional
)}

Magento 2 Object Manager จะพยายามฉีดพารามิเตอร์ที่จำเป็น ดังนั้นสิ่งนี้อาจเกิดขึ้นหากคุณเพิ่มพารามิเตอร์ที่ต้องการในตอนท้ายของตัวสร้าง

คุณสามารถแก้ไขได้โดยย้ายพารามิเตอร์ที่ต้องการใหม่ขึ้นไปเหนือพารามิเตอร์ทางเลือก


1
คริสคุณได้รับขอบคุณมาก! คุณแก้ไขปัญหาของฉันครั้งใหญ่
rofavadeka

และขอขอบคุณเป็นครั้งที่สอง ฉันรักพี่ชายของคุณ
Yonn Trimoreau

@ โซลูชัน Chris ที่คุณให้ช่วยฉันขอบคุณ
Mukesh

คำอธิบายยอดเยี่ยม!
เฮนรี่ Bui

ปัญหาของฉันคือเมื่อใช้การทำให้สมบูรณ์อัตโนมัติใน phpStorm มันล้มเหลวที่จะนำมาพร้อมกับส่วน = null: /
OZZIE

0

บางครั้งโมดูลบางส่วนได้รับการปรับปรุงและการอ้างอิงภายใต้ / สร้างยังไม่ได้รับการปรับปรุง

ลองทำbin/magento setup:di:compileแล้วลองใหม่อีกครั้ง

(ทำงานให้ฉันเมื่ออัปเดตโมดูลการชำระเงินและ / ไม่ได้โหลด)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.