เป็นไปได้หรือไม่ที่จะฉีดการพึ่งพาลงในโมเดล Magento 2 CRUD?
นั่นคือ - วีโอไอพี 2 มีคลาสโมเดลนามธรรมพื้นฐาน: Magento\Framework\Model\AbstractModel
. ถ้าคุณต้องการสร้างวัตถุสร้าง, อ่าน, อัปเดตและลบแบบง่ายคุณจะขยายคลาสนี้ด้วยคลาสของคุณเอง
class Foo extends Magento\Framework\Model\AbstractModel
{
}
เป็นไปได้หรือไม่ที่จะฉีดการพึ่งพาใน__construct
วิธีการของแบบจำลองของคุณ? เมื่อฉันลองฉันจะได้รับข้อผิดพลาดต่อไปนี้
ข้อผิดพลาดร้ายแรง: ไม่สามารถยกตัวอย่างคลาสนามธรรม Magento \ Framework \ Model \ ResourceModel \ AbstractResource
ผู้กระทำผิดน่าจะเป็นAbstractModel
ของ__construct
วิธีการ
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = []
) {
มีคำใบ้สองประเภทในตัวสร้างนี้ ( Magento\Framework\Model\ResourceModel\AbstractResource
, Magento\Framework\Data\Collection\AbstractDb
) ที่ไม่ใช่อินเตอร์เฟสของตัวจัดการวัตถุของวีโอไอพี พวกมันเป็นคลาสนามธรรม เมื่อฉันขยายชั้นเรียนนี้และพยายามที่จะเพิ่มการพึ่งพาการฉีดของฉัน
class Foo extends Magento\Framework\Model\AbstractModel
{
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = [],
\Package\Module\Model\Mine $mine,
) {
//...
parent::__construct($context, $registry, $resource, $resourceCollection, $data);
}
}
Magento bails เมื่อตัวจัดการวัตถุพยายามยกตัวอย่างคลาสนามธรรม
ฉันสามารถ "แก้ไข" สิ่งนี้ได้โดยการย้ายการพึ่งพาวัตถุของฉันต่อหน้าคลาสนามธรรม
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Package\Module\Model\Mine $mine,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = [],
) {
อย่างไรก็ตามสิ่งนี้เปลี่ยนลำดับการโต้แย้ง ในคลาสที่จัดการออบเจ็กต์อย่างเต็มที่สิ่งนี้จะไม่เป็นปัญหา อย่างไรก็ตามความจริงที่ว่าคำใบ้ประเภทคลาสนามธรรมนั้นมีอยู่หมายความว่ามีบางส่วนของระบบวีโอไอพีที่จะดำเนินการด้วยตนเอง (เช่นไม่ผ่านผู้จัดการวัตถุหรือ DI) ยกตัวอย่างวัตถุ CRUD และส่งผ่านวัตถุที่สอดคล้องกับคำแนะนำเฉพาะในลำดับนั้น
ปลอดภัยไหม คือคลาสนามธรรมเหล่านี้อยู่ในคอนสตรัคเตอร์ของโมเดลนามธรรมซึ่งเป็นเพียงรหัสดั้งเดิมและไม่ได้ใช้หรือไม่ หรือบางส่วนของระบบจะยังคงใช้สิ่งเหล่านี้ซึ่งหมายความว่าเป็นไปไม่ได้ที่จะฉีดการพึ่งพาลงในแบบจำลอง CRUD?