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" /> 

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

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


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.


2

Das hat bei mir funktioniert:

 sudo apt-get install php-intl

 sudo service apache2 reload

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. :-)


1

Leeren Sie den Cache rm -rf var/cache

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

$> redis-cli
$> flushall

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

wird Ihr Problem beheben


0

Dump Composer Autoload- Dateien:

$ composer dumpautoload

Dann:

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


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();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.