Magento 2 Class * Factory non esiste


15

Stavo cercando di installare un plugin e ho rimosso var / generation e var / cache / *. Ho controllato MAGE_MODE e sono nello sviluppatore ma ora quando accedo al front-end e all'amministratore ricevo errori casuali che dicono cose cattive come: Class Magento\Customer\Model\CustomerFactory does not exist

Classe Magento \ Vendite \ Modello \ ResourceModel \ Report \ OrderFactory non esiste

Alcune classi vengono create, ma non tutte. Ho provato di nuovo a svuotare la cache e la cartella di generazione, ma poi ho riscontrato gli stessi errori.

Qualche idea?


1
controlla i diritti sulla cartella var / generation
Marius

dice drwxrwxrw- 5
jstrez77,

Ho dovuto pulire la cartella var / generation alcune volte, andare prima nella home page, pulire, quindi admin, quindi accedere, quindi pulire ... e ha funzionato ... ?? Non capisco questo
jstrez77,

Sicuramente permessi nella cartella 'var / generation'.
Travis van der Font,

Risposte:


21

Magento 2 genera le classi Factory all'interno della var/generationdirectory. Pertanto, se si verifica un problema di autorizzazione della cartella o del proprietario della cartella con quella directory, la classe di fabbrica non può essere generata e si ottiene tale errore.

Quando si cancella la var/generationdirectory e si imposta l'autorizzazione appropriata, questo errore dovrebbe essere risolto.

Scopri di più sulla generazione del codice in Magento 2


Potrebbe anche essere var/dio var/cache, vedi devdocs.magento.com/guides/v2.2/install-gde/trouble/…
Yvan

10

Per me, ho rimosso la var/generationcartella quindi ho eseguito magento setup:di:compileche ha generato tutte le classi necessarie.

(nel mio caso: poi ho riscontrato un problema con la cache, ho rimosso la cartella cache iniziale.)

Quindi ha risolto il mio problema. Saluti !!


1
ho

5

In magento nuove versioni come 2.2.2 e successive questo percorso di generazione del codice è cambiato in

<Magento root folder>/generated

quindi devi controllare anche le autorizzazioni per questa cartella. È necessario eseguire il comando seguente nella directory principale della directory di installazione di Magento per risolvere questo problema:

sudo chmod -R 777 generated/

cancella anche la cache all'inizio
Hassan Ali Shahzad,

il suo lavoro per me
matinict

1

Sono necessari i seguenti comandi:

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

Inoltre, è necessaria un'autorizzazione adeguata. Se in produzione, è necessario eseguire le autorizzazioni appropriate. Tuttavia, sul computer locale, è possibile eseguire l'autorizzazione completa:

sudo chmod -R 777 *

1

Concedi l'autorizzazione 777 e modifica la proprietà dei dati www della cartella generata / codice, quindi esegui il comando sudo php bin/magento setup:di:compilecancella cache e risolvi il problema


1

È solo un <magento-root>/var/problema di autorizzazione delle cartelle.

Eseguire il comando seguente utilizzando la modalità CLI

sudo chmod -R 777 var/

0

Magento 2 crea le classi factory nella var/generationcartella e se aggiungi un nuovo parametro nella tua __construct()e la sua classe Factory non esiste, Magento 2 genera il messaggio di errore sopra riportato. Anche se ci sono già poche soluzioni per cui porre una domanda, posso suggerirti un'altra soluzione che non richiede di cancellare la cartella di generazione. Utilizzare il comando seguente dopo aver apportato qualsiasi modifica relativa alle classi Factory:

bin/magento setup:di:compile

Questo comando può essere più utile sul server di produzione.


-2

Classe ... Factory non esiste significa che la classe del modello non è stata caricata. Come Magento 2 basato sulla programmazione modulare, quindi dobbiamo specificare la classe del modello in cui vogliamo usare esplicitamente. Possiamo usare la nostra classe di modelli in due tipi:

1.da "usa"

use Magento\Customer\Setup\CustomerSetupFactory;

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

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

Quando si preme l'URL ( http://domain.com/your frontname del modulo) del plug-in sul browser, Magento genera il codice per il modulo come di seguito:

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

Nel tuo caso devi controllare che "CustomerFactory" e "OrderFactory" siano usati come sopra o meno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.