Câu trả lời:
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.
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 _objectManager
thà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.
Về mặt kỹ thuật nếu bạn có một thể hiện của các \Magento\Framework\ObjectManager
bạn có thể gọi create
của get
và đ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 .