Dies sind die besten Methoden, um eine Sammlung in Magento 2 zu erhalten

7

Ich erstelle ein benutzerdefiniertes Modul. Dies ist die bevorzugte Methode, um die Sammlung zu erhalten. Ich muss den Vor- und Nachteil dieser Methode kennen.

objectManager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
$productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
$productCollection->load();

Fabrik

protected $_productCollectionFactory;

    public function __construct(
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
        array $data = []
    ) {
        $this->_productCollectionFactory = $productCollectionFactory;
        parent::__construct($data);
    }



    public function getProductCollection()
    {
        /** @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */
        $collection = $this->_productCollectionFactory->create();
        return $collection;
    }
Qaisar Satti
quelle

Antworten:

14

Sie sollten den Factory-Ansatz verwenden.
Der Vorteil ist: Sie können an einem Punkt entscheiden, ein allgemeines Verhalten hinzuzufügen, wenn eine bestimmte Sammlung abgerufen wird. Wenn die Factory automatisch generiert wird, können Sie einfach Ihre Factory-Klasse erstellen und das Verhalten in Ihren Code einfügen. Auf diese Weise wird Ihre Fabrik anstelle der automatisch generierten Klasse verwendet.
Es ist ähnlich wie bei der Verwendung von getNameMethode anstelle von getData('name').

Der Vorteil der Verwendung des Objektmanagers besteht darin, dass Sie weniger Code schreiben müssen, dies macht es jedoch nicht richtig.

Marius
quelle
7

Fabriken sind spezielle Objekte, die nur einen Zweck haben: eine Instanz einer nicht injizierbaren Klasse oder Schnittstelle zu erstellen.

Weitere Details finden Sie in der offiziellen Dokumentation

KAndy
quelle
2

Verwenden Sie die Konstruktorinjektionsmethode, die zweite.

Die Factory-Methode ist eine bewährte Methode, um die Sammlung abzurufen. Verwenden Sie daher die Factory-Methode.

An einigen Stellen kommt ObjectManager jedoch zum Einsatz, da die Konstruktorinjektion für Collection nicht funktioniert (z. B. Observer-Klassen).

Der Rest wird in KAndys offiziellem Magento-Link erklärt.

Mohammad Mujassam
quelle
3
"da die Konstruktorinjektion für Collection nicht funktioniert (dh: Observer-Klassen)" - was meinst du? Was ist mit \Magento\Framework\Event\ObserverFactory?
Nevvermind
2

Verwenden Sie die Factory-Methode , um sie in Magento 2 anstelle des Objektmanagers zu verwenden.

Im Kernsystem Magento 2 werden am häufigsten Factory-Methoden anstelle von Objectmanager verwendet.

Sie können das Objektmanager-Konzept verwenden, während Sie mit dem Root-Skript spielen, oder Sie haben keinen Block für die Vorlagendatei erstellt. Sie können den Objektmanager direkt aufrufen.

Factorymethod ist jedoch die richtige Methode für das Magento 2-System.

Rakesh Jesadiya
quelle