มีวิธีทำสิ่งที่ง่ายเหมือนใน magento2 หรือไม่?
ฟังก์ชั่นการโทรเช่นนี้ใน magento 2
$model = Mage::getModel('cms/page');
มีวิธีทำสิ่งที่ง่ายเหมือนใน magento2 หรือไม่?
ฟังก์ชั่นการโทรเช่นนี้ใน magento 2
$model = Mage::getModel('cms/page');
คำตอบ:
Magento ห้ามมิให้ใช้ ObjectManager โดยตรง มันมีคลาสบริการที่เป็นนามธรรมสำหรับทุกสถานการณ์
สำหรับรุ่นที่ไม่ต้องฉีดทั้งหมดคุณต้องใช้จากโรงงาน:
ป้องกัน $ pageFactory ฟังก์ชั่นสาธารณะ __ โครงสร้าง (\ Magento \ Cms \ Model \ Page โรงงาน $ pageFactory) { $ this-> pageFactory = $ pageFactory; } ฟังก์ชั่นสาธารณะ someFunc () { ... $ page = $ this-> pageFactory-> create (); ... }
สิ่งที่คุณต้องทำคือถามโรงงานของโมเดลที่ต้องการในตัวสร้าง มันจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อคุณเรียกใช้วีโอไอพีหรือคอมไพเลอร์
คุณสามารถทำได้เช่นนี้:
$model = $this->_objectManager->create('Full\Model\Class\Name\Here');
แต่คุณต้องแน่ใจว่า_objectManager
สมาชิกนั้นมีอยู่จริง
ในชั้นเรียนส่วนใหญ่ควร แต่ถ้ามันไม่ได้ฉีดเข้าไปในตัวสร้าง แบบนี้:
protected $_objectManager;
public function __construct(
...,
\Magento\Framework\ObjectManager $objectManager,
....
){
....
$this->_objectManager= $objectManager;
....
}
[แก้ไขหนึ่งปีต่อมา]
แม้ว่าคำตอบข้างต้นจะใช้ได้ แต่ก็ไม่ใช่วิธีปฏิบัติที่ดีที่สุด สำหรับวิธีที่ถูกต้องในการทำมันดูคำตอบของ Anton