Каковы эквиваленты моделей magento 1.x в magento 2.x
Я новичок в magento2, и мне очень сложно правильно использовать обычные фрагменты кода в новой версии. Итак, пожалуйста, помогите мне здесь и объясните эквиваленты следующих фрагментов в magento2:
Mage::getModel('catalog/product')->getCollection();
Mage::getModel('sales/order');
Mage::getModel('catalog/category')->getCollection();
Mage::getModel('customer/customer');
Mage::getModel('cart/quote');
Mage::getModel('checkout/cart');
Mage::getSingleton('customer/session');
Mage::getModel('catalog/category')->load(id);
Я надеюсь, что этот вопрос поможет всем новым разработчикам magento 2 найти относительные запросы в одном месте.
1 answers
В magento 2 больше нет статического метода для создания экземпляров моделей.
Вы должны использовать инъекцию зависимостей.
Для моделей, которые не поддаются инъекции, вы можете использовать фабрику, которая будет создавать экземпляры моделей.
неинъекционные продукты - это, например, модель продукта, модель заказа... в общем, то, что вы можете назвать нагрузкой. Это включает в себя коллекции.
Инъекционные вещества вы можете просто ввести в свой конструктор.
Например, сеанс клиента можно вводить инъекционно.
Допустим, вам нужно использовать модели, описанные выше, в одном из ваших классов.
Я добавлю их все в один класс, но вы можете использовать только то, что вам нужно.
class MyClass extends SomeOtherClass
{
protected $productCollectionFactory;
protected $orderFactory;
protected $categoryCollectionFactory;
protected $customerFactory;
protected $cart;
protected $customerSession;
protected $categorFactory;
public function __construct(
... //you can have some other parameters here
\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
\Magento\Sales\Model\OrderFactory $orderFactory,
\Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,
\Magento\Customer\Model\CustomerFactory $customerFactory,
\Magento\Checkout\Model\Cart $cart,
\Magento\Customer\Model\Session $customerSession,
\Magento\Catalog\Model\CategoryFactory $categoryFactory,
... //you can have other parameters here
) {
....
$this->productCollectionFactory = $productCollectionFactory;
$this->orderFactory = $orderFactory;
$this->categoryCollectionFactory = $categoryCollectionFactory;
$this->customerFactory = $customerFactory;
$this->cart = $cart;
$this->customerSession = $customerSession;
$this->categoryFactory = $categorFactory;
....
}
}
Тогда вы можете использовать их в своем классе вот так.
Чтобы получить коллекцию продуктов, вы можете сделать следующее:
$productCollection = $this->productCollectionFactory->create();
Чтобы получить представление о модели порядка, сделайте следующее:
$order = $this->orderFactory->create();
Коллекция категорий
$categoryCollection = $this->categoryCollectionFactory->create();
Экземпляр клиента
$customer = $this->customerFactory->create();
Корзина/цитата не существует в magento 2.
Для оформления заказа вы можете просто использовать $this->cart
, так как это можно вводить инъекционно.
то же самое для сеанса клиента. Это синглеты.
Получить категорию
$category = $this->categoryFactory->create()->load($id);