Làm thế nào để khởi tạo một mô hình trong magento2?


14

Có cách nào để làm một cái gì đó đơn giản như trong magento2 không?

chức năng gọi như thế này trong magento 2,

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

câu hỏi không rõ ràng đặt thêm chi tiết ....
Amit Bera

Câu trả lời:


28

Magento tuyệt đối không khuyến khích việc sử dụng ObjectManager trực tiếp. Nó cung cấp các lớp dịch vụ trừu tượng hóa nó cho tất cả các kịch bản.

Đối với tất cả các loại thuốc không tiêm (mô hình), bạn phải sử dụng nhà máy:

được bảo vệ $ pageFactory;

chức năng công khai __construct (\ Magento \ Cms \ Model \ PageFactory $ pageFactory)
{
    $ this-> pageFactory = $ pageFactory;
}

Hàm công khai someFunc ()
{
    ...
    $ page = $ this-> pageFactory-> create ();
    ...
}

Tất cả bạn phải làm là yêu cầu nhà máy của mô hình mong muốn trong hàm tạo. Nó sẽ được tạo tự động khi bạn chạy Magento hoặc trình biên dịch.


11

Bạn có thể làm như thế này:

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

nhưng bạn phải chắc chắn rằng _objectManagerthành viên tồn tại.

Trong hầu hết các lớp nên, nhưng nếu nó không tiêm nó vào hàm tạo. Như thế này:

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

[chỉnh sửa một năm sau]
Ngay cả khi câu trả lời ở trên hoạt động, đó không phải là cách thực hành tốt nhất. Để biết cách làm đúng, hãy xem câu trả lời của Anton.


gặp lỗi - Class Magento \ Framework \ ObjectManager không tồn tại
Anas Mansuri

5

Về mặt kỹ thuật nếu bạn có một thể hiện của các \Magento\Framework\ObjectManagerbạn có thể gọi createcủa getvà điều này sẽ cung cấp cho bạn các đối tượng mà bạn mong muốn. Nhưng nó thực sự phụ thuộc vào nơi bạn muốn sử dụng điều này vì Magento 2 chuyển sang tiêm phụ thuộc thông qua hàm tạo .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.