Magento 2 Class * Fabryka nie istnieje

15

Próbowałem zainstalować wtyczkę i usunąłem var / generation i var / cache / *. Sprawdziłem MAGE_MODE i jestem programistą, ale teraz, gdy uzyskuję dostęp do interfejsu i administratora, pojawiają się losowe błędy mówiące o takich rzeczach: Class Magento\Customer\Model\CustomerFactory does not exist

Klasa Magento \ Sales \ Model \ ResourceModel \ Report \ OrderFactory nie istnieje

Niektóre klasy są tworzone, ale nie wszystkie. Próbowałem ponownie wyczyścić pamięć podręczną i folder generowania, ale potem otrzymuję te same błędy.

Jakieś pomysły?

jstrez77
źródło
1
sprawdź prawa do folderu var / generation
Marius
mówi drwxrwxrw- 5
jstrez77
Musiałem wyczyścić folder var / generation kilka razy, najpierw przejść do strony głównej, wyczyścić, potem admin, potem zalogować się, potem wyczyścić ... i to zadziałało ... ?? Nie rozumiem tego
jstrez77
Zdecydowanie uprawnienia w folderze „var / generation”.
Travis van der Font,

Odpowiedzi:

21

Magento 2 generuje klasy Factory wewnątrz var/generationkatalogu. Jeśli więc istnieje problem z uprawnieniami do folderu lub problem z właścicielem folderu w tym katalogu, nie można wygenerować klasy fabrycznej i pojawia się taki błąd.

Po wyczyszczeniu var/generationkatalogu i ustawieniu odpowiednich uprawnień do niego ten błąd powinien zostać rozwiązany.

Zobacz więcej na temat generowania kodu w Magento 2

Mukesh Chapagain
źródło
Może być również var/dilub var/cache, patrz devdocs.magento.com/guides/v2.2/install-gde/trouble/…
Yvan
10

Dla mnie usunąłem var/generationfolder, a następnie uruchomiłem, magento setup:di:compilektóry wygenerował wszystkie niezbędne klasy.

(w moim przypadku: Wystąpił problem z pamięcią podręczną, usunąłem początkowy folder pamięci podręcznej).

To rozwiązało mój problem. Twoje zdrowie !!

Suman KC
źródło
1
trzeba zmienić właściciela plików na końcu
moshe beeri
5

W Magento nowe wersje, takie jak 2.2.2 i nowsze, zmieniły ścieżkę generowania kodu na

<Magento root folder>/generated

więc musisz sprawdzić uprawnienia również dla tego folderu. Musisz uruchomić następujące polecenie w katalogu głównym katalogu instalacyjnego Magento, aby rozwiązać ten problem:

sudo chmod -R 777 generated/
Hassan Ali Shahzad
źródło
wyczyść pamięć podręczną również na początku
Hassan Ali Shahzad
jego praca dla mnie
Matinict
1

Należy wykonać następujące polecenia:

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

Potrzebne jest również odpowiednie pozwolenie. Jeśli na produkcji, musisz wykonać odpowiednie uprawnienia. Ale na komputerze lokalnym możesz uruchomić pełne uprawnienia:

sudo chmod -R 777 *
Agilox
źródło
1

Udziel uprawnienia 777 i zmień własność na dane www folderu wygenerowanego / kodu, a następnie uruchom polecenie sudo php bin/magento setup:di:compile wyczyść pamięć podręczną i rozwiąż problem

Mohammed Muzammil
źródło
1

To tylko <magento-root>/var/problem z uprawnieniami do folderu.

Wykonaj poniższe polecenie w trybie CLI

sudo chmod -R 777 var/
Anwar
źródło
0

Magento 2 tworzy klasy fabryczne w var/generationfolderze, a jeśli dodasz nowy parametr w swoim, __construct()a jego klasa fabryczna nie istnieje, Magento 2 wyświetli powyższy komunikat o błędzie. Mimo że istnieje niewiele rozwiązań, które już ci dały pytanie, mogę zaproponować inne rozwiązanie, które nie wymaga wyczyszczenia folderu generowania. Użyj poniższej komendy po wprowadzeniu jakichkolwiek zmian związanych z klasami fabrycznymi:

bin/magento setup:di:compile

To polecenie może być bardziej przydatne na serwerze produkcyjnym.

Sourabh Kumar Sharma
źródło
-2

Klasa ... Fabryka nie istnieje oznacza, że ​​klasa modelu nie została załadowana. Ponieważ Magento 2 opiera się na programowaniu modułowym, musimy określić klasę modelu, w której chcemy użyć jawnie. Możemy użyć naszej klasy modelu w dwóch typach:

1. przez „użycie”

use Magento\Customer\Setup\CustomerSetupFactory;

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

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

Po kliknięciu adresu URL ( http://domain.com/twoj nazwa frontowa modułu) wtyczki w przeglądarce Magento generuje kod dla Twojego modułu, jak poniżej:

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

W twoim przypadku musisz sprawdzić, czy „CustomerFactory” i „OrderFactory” są używane jak powyżej, czy nie.

Suman Singh
źródło