Błąd krytyczny: nie można utworzyć instancji interfejsu


12

Mój sklep Magento zgłasza ten błąd:

Błąd krytyczny: Nie można utworzyć instancji interfejsu Magento \ Framework \ View \ Design \ Theme \ ResolverInterface w /Library/WebServer/Documents/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php w linii 73

Nie wiem, dlaczego to się zaczęło. Nie wykonałem instalacji nowego modułu. Sklep działał dobrze.

Sprawdzam uprawnienia do plików i nie widzę żadnego problemu. Usuń także / var / dir i, jak sądzę, wszystkie foldery / pliki, w których zostały utworzone.

[EDYCJA] Preferencje są zdefiniowane dostawca / magento / magento2-base / app / etc / di.xml

<preference for="Magento\Framework\View\Design\Theme\ResolverInterface" type="Magento\Theme\Model\Theme\Resolver" /> 

1
mam nadzieję, że w twoim niestandardowym module lub kodzie próbujesz użyć Magento \ Framework \ View \ Design \ Theme \ ResolverInterface w konstruktorze lub menedżerze obiektów
Pradeep Kumar

@ PradeepKumar Nie. Nie jestem.
Filipe Sá

2
wyczyść pamięć podręczną i zawartość var/generation.
Marius

@Marius, jak podano w pytaniu, już całkowicie usunąłem folder / var / *.
Filipe Sá

Przepraszam. Przegapiłem tę linię.
Marius

Odpowiedzi:


23

Jeśli używasz redis, uruchom:


redis-cli flushall



Jeśli używasz również środowiska takiego jak ansible ( lxc - server), musisz wykonać to polecenie w kontenerze. Dodatkowo wykonałem następujące czynności:

  • Jasny var/generation
  • Jasny var/cache
  • Włącz moduły Magento: bin/magento module:enable --all
  • Kompiluj DI bin/magento setup:di:compile

1
było tak wiele wprowadzających w błąd rozwiązań i to zadziałało od razu

3
Włącz moduły Magento: moduł bin / magento: włącz - wszystkie - Pracowałem dla mnie
Agnes

NIE! To nie jest dobra praktyka! bin / magento module: enable --all is like chmod -R 777 :(
Kārlis Millers

6

Miałem ten błąd i został rozwiązany przez wyczyszczenie folderu var, a następnie uruchomienie setup:upgrade. Jeśli to nie rozwiąże problemu, poszukaj błędów w di.xmlplikach


pracował dla mnie, a konkretnievar/cache
Joshua Soileau

Dzięki redis-cli flushalldziałało dla mnie.
Sarjan Gautam

5

Uruchom następujące polecenie i sprawdź.

rm -rf generated

rm -rf var/*

Pracował dla mnie.


2

To działało dla mnie:

 sudo apt-get install php-intl

 sudo service apache2 reload

1

W moim przypadku musiałem usunąć moduł i po prostu usunąłem pliki modułu bez przestrzegania odpowiednich metod, a następnie ten błąd pojawił się wszędzie na ekranie. Po wielu poszukiwaniach skończyłem, aby zastąpić pliki modułu z powrotem do tego samego katalogu i usunąłem wszystkie wymagane foldery z var i uruchomiłem następujące polecenia.

php bin/magento setup:upgrade
php bin/magento setup:static-content:deploy

i wszystko zostało naprawione. Następnie podążyłem za prawidłowymi sposobami usunięcia modułu. Mam nadzieję, że oszczędzi to komuś czas. :-)


1

Wyczyść pamięć podręczną rm -rf var/cache

Jeśli funkcja redis jest włączona, wyczyść db redis, używając wiersza polecenia:

$> redis-cli
$> flushall

0
php bin/magento c:c
php bin/magento setup:di:compile

naprawi twój problem


0

Zrzut plików autoload kompozytora :

$ composer dumpautoload

Następnie:

bin/magento setup:upgrade
bin/magento setup:di:compile


0

Ten błąd jest tworzony, gdy próbujesz utworzyć (nowy) obiekt (klasę), który jest w rzeczywistości i ma interfejs. Zwykle dzieje się tak, gdy nie przesłoniłeś interfejsu dla klasy w pliku di.xml. Lub zastąpiłeś plik di.xml w katalogu adminhtml i próbujesz użyć interfejsu w interfejsie użytkownika.

interface MyInterface{
   pubic function getVariable(): int
}

class MyClass 
implements MyInterface{

   protected $variable;

   pubic function getVariable(){
      return $this->variable;
   }
}

$variable = new MyInterface();

0

Ten błąd może również wynikać z włączania lub wyłączania modułów bezpośrednio w aplikacji / etc / config.php, szczególnie gdy włącza się lub wyłącza podstawowe moduły Magento. W takim przypadku najlepiej wyczyścić pamięć podręczną, opróżnić pamięć podręczną redis, ponownie uruchomić lakier i php-fpm. I to działa.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.