Magento 2 Class * Factory existiert nicht

15

Ich habe versucht, ein Plugin zu installieren und habe var / generation und var / cache / * entfernt. Ich habe den MAGE_MODE überprüft und bin im Entwickler, aber jetzt, wenn ich auf das Front-End und den Administrator zugreife, erhalte ich zufällige Fehler, die bedeuten, dass Dinge wie: Class Magento\Customer\Model\CustomerFactory does not exist

Die Klasse Magento \ Sales \ Model \ ResourceModel \ Report \ OrderFactory existiert nicht

Einige der Klassen werden erstellt, aber nicht alle. Ich habe erneut versucht, den Cache und den Generierungsordner zu leeren, aber dann erhalte ich nur die gleichen Fehler.

Irgendwelche Ideen?

jstrez77
quelle
1
Überprüfen Sie die Rechte für den Ordner var / generation
Marius
Es heißt drwxrwxrw- 5
jstrez77
Ich musste den var / generation-Ordner ein paar Mal bereinigen, zuerst auf die Homepage gehen, dann bereinigen, dann admin, dann anmelden, dann bereinigen ... und es hat funktioniert ... ?? Ich verstehe das nicht
jstrez77
Definitiv Berechtigungen im Ordner 'var / generation'.
Travis van der Font

Antworten:

21

Magento 2 generiert Factory-Klassen im var/generationVerzeichnis. Wenn für dieses Verzeichnis ein Problem mit der Ordnerberechtigung oder dem Ordnerbesitzer vorliegt, kann die Factory-Klasse nicht generiert werden, und Sie erhalten einen solchen Fehler.

Wenn Sie das var/generationVerzeichnis löschen und die entsprechende Berechtigung dafür festlegen, sollte dieser Fehler behoben sein.

Weitere Informationen zur Codegenerierung in Magento 2

Mukesh Chapagain
quelle
Könnte auch var/dioder sein var/cache, siehe devdocs.magento.com/guides/v2.2/install-gde/trouble/…
Yvan
9

Für mich entfernte ich var/generationOrdner, dann lief ich, magento setup:di:compileder alle notwendigen Klassen erzeugte.

(In meinem Fall: Dann habe ich ein Cache-Problem festgestellt und den ursprünglichen Cache-Ordner entfernt.)

Dann hat es mein Problem gelöst. Prost !!

Suman KC
quelle
1
musste am Ende den
Dateibesitzer wechseln
5

In Magento-Versionen wie 2.2.2 und höher wurde dieser Code-Generierungspfad in geändert

<Magento root folder>/generated

Sie müssen also auch die Berechtigungen für diesen Ordner überprüfen. Sie müssen den folgenden Befehl im Stammverzeichnis des Magento-Installationsverzeichnisses ausführen, um dieses Problem zu beheben:

sudo chmod -R 777 generated/
Hassan Ali Shahzad
quelle
Leerer Cache auch im Start
Hassan Ali Shahzad
seine Arbeit für mich
matinict
1

Folgende Befehle müssen ausgeführt werden:

sudo php -f bin/magento setup:di:compile 

sudo rm -rf pub/static/*/*; sudo rm -rf var/*/*; 
sudo php -f bin/magento setup:static-content:deploy -f  

sudo php bin/magento cache:clean

Außerdem ist eine entsprechende Erlaubnis erforderlich. Wenn Sie in Betrieb sind, müssen Sie die entsprechenden Berechtigungen ausführen. Auf einem lokalen Computer können Sie jedoch die vollständige Berechtigung ausführen:

sudo chmod -R 777 *
Agilox
quelle
1

Erteilen Sie 777 die Erlaubnis und ändern Sie den Besitzer für www-Daten des generierten Ordners / code. Führen Sie dann den Befehl sudo php bin/magento setup:di:compileclear cache aus und boom aus, um Ihr Problem zu lösen

Mohammed Muzammil
quelle
1

Es ist nur ein <magento-root>/var/Problem mit der Ordnerberechtigung.

Führen Sie den folgenden Befehl im CLI-Modus aus

sudo chmod -R 777 var/
Anwar
quelle
0

Magento 2 erstellt die Factory-Klassen im var/generationOrdner. Wenn Sie einen neuen Parameter in Ihre einfügen __construct()und die Factory-Klasse nicht vorhanden ist, gibt Magento 2 die obige Fehlermeldung aus. Auch wenn es nur wenige Lösungen gibt, die bereits für Sie eine Frage geben, kann ich Ihnen eine andere Lösung vorschlagen, bei der Sie Ihren Generierungsordner nicht löschen müssen. Bitte verwenden Sie den folgenden Befehl, wenn Änderungen in Bezug auf Factory-Klassen vorgenommen wurden:

bin/magento setup:di:compile

Dieser Befehl kann auf dem Produktionsserver nützlicher sein.

Sourabh Kumar Sharma
quelle
-2

Klasse ... Die Fabrik existiert nicht, dh Ihre Modellklasse wurde nicht geladen. Wie Magento 2, das auf modularer Programmierung basiert, müssen wir die Modellklasse angeben, die wir explizit verwenden möchten. Wir können unsere Modellklasse in zwei Typen verwenden:

1. durch "Verwendung"

use Magento\Customer\Setup\CustomerSetupFactory;

public function __construct(CustomerSetupFactory $customerSetupFactory)
{
    $this->customerSetupFactory = $customerSetupFactory;
}
  1. Direkt

    public function __construct(Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory){
    
    $this->customerSetupFactory = $customerSetupFactory;
    
    }

Wenn Sie die URL ( http://domain.com/Ihr Modul-Frontname) Ihres Plugins im Browser eingeben, generiert Magento den Code für Ihr Modul wie folgt:

\var\generation\Your Vendor Directory\Your Module Directory\Controller
\var\generation\Your Vendor Directory\Your Module Directory\Model

In Ihrem Fall müssen Sie überprüfen, ob "CustomerFactory" und "OrderFactory" im obigen Format verwendet werden oder nicht.

Suman Singh
quelle