Schwerwiegender Fehler: Schnittstelle kann nicht instanziiert werden

11

Mein Magento-Shop wirft diesen Fehler aus:

Schwerwiegender Fehler: Die Schnittstelle Magento \ Framework \ View \ Design \ Theme \ ResolverInterface in /Library/WebServer/Documents/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php in Zeile 73 kann nicht instanziiert werden

Ich weiß nicht, warum es anfing zu erscheinen. Ich habe keine neue Modulinstallation durchgeführt. Der Laden funktionierte gut.

Ich habe die Dateiberechtigungen überprüft und sehe dort kein Problem. Löschen Sie auch das Verzeichnis / var / dir und, glaube ich, alle Ordner / Dateien, die erstellt wurden.

[BEARBEITEN] Die Voreinstellung ist Vendor / Magento / Magento2-Base / App / etc / di.xml

<preference for="Magento\Framework\View\Design\Theme\ResolverInterface" type="Magento\Theme\Model\Theme\Resolver" /> 
Filipe Sá
quelle
1
Ich hoffe, in Ihrem benutzerdefinierten Modul oder Code versuchen Sie, Magento \ Framework \ View \ Design \ Theme \ ResolverInterface im Konstruktor oder Objektmanager zu verwenden
Pradeep Kumar
@ PradeepKumar Nein, bin ich nicht.
Filipe Sá
2
Leeren Sie Ihren Cache und den Inhalt von var/generation.
Marius
@Marius Wie in der Frage angegeben, habe ich den Ordner / var / * bereits vollständig entfernt.
Filipe Sá
Es tut uns leid. Ich habe diese Zeile verpasst.
Marius

Antworten:

23

Wenn Sie redis verwenden, führen Sie Folgendes aus:


redis-cli flushall



Wenn Sie auch eine Umgebung wie ansible ( lxc - server) verwenden, müssen Sie diesen Befehl im Container ausführen . Außerdem habe ich folgendes gemacht:

  • klar var/generation
  • klar var/cache
  • Magento-Module aktivieren: bin/magento module:enable --all
  • Kompilieren Sie DI bin/magento setup:di:compile
Gorr1995
quelle
1
Es gab so viele irreführende Lösungen und dies funktionierte sofort
3
Magento-Module aktivieren: bin / magento-Modul: aktivieren --all - Arbeitete für mich
Agnes
NEIN! Es ist keine gute Übung! bin / magento Modul: aktivieren --all ist wie chmod -R 777 :(
Kārlis Millers
6

Ich hatte diesen Fehler und er wurde behoben, indem der Ordner var gelöscht und dann ausgeführt wurde setup:upgrade. Wenn dies nicht funktioniert, suchen Sie nach Fehlern in di.xmlDateien

Claudiu Creanga
quelle
arbeitete speziell für michvar/cache
Joshua Soileau
Danke redis-cli flushallhat für mich funktioniert.
Sarjan Gautam
4

Führen Sie den folgenden Befehl aus und überprüfen Sie ihn.

rm -rf generated

rm -rf var/*

Hat für mich gearbeitet.

Kazim Noorani
quelle
2

Das hat bei mir funktioniert:

 sudo apt-get install php-intl

 sudo service apache2 reload
abahet
quelle
1

In meinem Fall musste ich ein Modul entfernen und löschte einfach die Dateien des Moduls, ohne die richtigen Methoden zu befolgen, und dann war dieser Fehler überall auf dem Bildschirm. Nachdem ich viel gesucht hatte, ersetzte ich die Dateien des Moduls wieder in dasselbe Verzeichnis und löschte alle erforderlichen Ordner aus var und führte die folgenden Befehle aus.

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

und alles wurde behoben. Ich habe dann die richtigen Methoden zum Entfernen des Moduls befolgt. Hoffe das spart jemandem Zeit. :-)

MTM
quelle
1

Leeren Sie den Cache rm -rf var/cache

Wenn redis aktiviert ist, löschen Sie redis db über die Befehlszeile:

$> redis-cli
$> flushall
Arvind07
quelle
0
php bin/magento c:c
php bin/magento setup:di:compile

wird Ihr Problem beheben

Dexture
quelle
0

Dump Composer Autoload- Dateien:

$ composer dumpautoload

Dann:

bin/magento setup:upgrade
bin/magento setup:di:compile
user80131
quelle
0

Dieser Fehler wird erstellt, wenn Sie versuchen, ein Objekt (eine Klasse) zu erstellen, das tatsächlich eine Schnittstelle darstellt. Dies geschieht normalerweise, wenn Sie die Schnittstelle für eine Klasse in der Datei di.xml nicht überschrieben haben. Oder haben die in der Datei di.xml im Verzeichnis adminhtml überschrieben und versuchen, die Schnittstelle im Frontend zu verwenden.

interface MyInterface{
   pubic function getVariable(): int
}

class MyClass 
implements MyInterface{

   protected $variable;

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

$variable = new MyInterface();
Dallas Clarke
quelle