วิธีสร้างแบบจำลองใน magento2 ได้อย่างไร


14

มีวิธีทำสิ่งที่ง่ายเหมือนใน magento2 หรือไม่?

ฟังก์ชั่นการโทรเช่นนี้ใน magento 2

$model = Mage::getModel('cms/page');

คำถามไม่ชัดเจนให้รายละเอียดเพิ่มเติม ....
Amit Bera

คำตอบ:


28

Magento ห้ามมิให้ใช้ ObjectManager โดยตรง มันมีคลาสบริการที่เป็นนามธรรมสำหรับทุกสถานการณ์

สำหรับรุ่นที่ไม่ต้องฉีดทั้งหมดคุณต้องใช้จากโรงงาน:

ป้องกัน $ pageFactory

ฟังก์ชั่นสาธารณะ __ โครงสร้าง (\ Magento \ Cms \ Model \ Page โรงงาน $ pageFactory)
{
    $ this-> pageFactory = $ pageFactory;
}

ฟังก์ชั่นสาธารณะ someFunc ()
{
    ...
    $ page = $ this-> pageFactory-> create ();
    ...
}

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


11

คุณสามารถทำได้เช่นนี้:

$model = $this->_objectManager->create('Full\Model\Class\Name\Here');

แต่คุณต้องแน่ใจว่า_objectManagerสมาชิกนั้นมีอยู่จริง

ในชั้นเรียนส่วนใหญ่ควร แต่ถ้ามันไม่ได้ฉีดเข้าไปในตัวสร้าง แบบนี้:

protected $_objectManager;
public function __construct(
   ...,
   \Magento\Framework\ObjectManager $objectManager,
   ....
){
    ....
    $this->_objectManager= $objectManager;
    ....
}

[แก้ไขหนึ่งปีต่อมา]
แม้ว่าคำตอบข้างต้นจะใช้ได้ แต่ก็ไม่ใช่วิธีปฏิบัติที่ดีที่สุด สำหรับวิธีที่ถูกต้องในการทำมันดูคำตอบของ Anton


มีข้อผิดพลาด - ไม่มี Class Magento \ Framework \ ObjectManager
Anas Mansuri

5

ในทางเทคนิคถ้าคุณมีตัวอย่างของการที่\Magento\Framework\ObjectManagerคุณสามารถโทรหาcreateของgetและนี่จะทำให้คุณวัตถุที่คุณต้องการ แต่จริงๆมันขึ้นอยู่กับว่าคุณต้องการที่จะใช้นี้เป็นวีโอไอพี 2 กะต่อการพึ่งพาการฉีดผ่านทางคอนสตรัค

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