Erreur fatale: impossible d'instancier l'interface

12

Ma boutique magento lance cette erreur:

Erreur fatale: impossible d'instancier l'interface Magento \ Framework \ View \ Design \ Theme \ ResolverInterface dans /Library/WebServer/Documents/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php sur la ligne 73

Je ne sais pas pourquoi cela a commencé à apparaître. Je n'ai fait aucune nouvelle installation de module. Le magasin fonctionnait bien.

J'ai vérifié les autorisations des fichiers et je n'y vois aucun problème. Supprimez également le répertoire / var / et, je pense, tous les dossiers / fichiers où ils ont été créés.

[MODIFIER] La préférence est définie vendeur / magento / magento2-base / app / etc / di.xml

<preference for="Magento\Framework\View\Design\Theme\ResolverInterface" type="Magento\Theme\Model\Theme\Resolver" /> 
Filipe Sá
la source
1
J'espère que dans votre module personnalisé ou codez votre tentative d'utilisation de Magento \ Framework \ View \ Design \ Theme \ ResolverInterface dans le constructeur ou le gestionnaire d'objets
Pradeep Kumar
@PradeepKumar Non. Je ne le suis pas.
Filipe Sá
2
vider votre cache et le contenu de var/generation.
Marius
@Marius, comme indiqué dans la question, j'ai déjà supprimé complètement le dossier / var / *.
Filipe Sá
Désolé. J'ai raté cette ligne.
Marius

Réponses:

23

Si vous utilisez redis, exécutez:


redis-cli flushall



Si vous utilisez également un environnement comme ansible ( lxc - server), vous devrez exécuter cette commande dans le conteneur. De plus, j'ai fait ce qui suit:

  • Clair var/generation
  • Clair var/cache
  • Activer les modules Magento: bin/magento module:enable --all
  • Compiler DI bin/magento setup:di:compile
Gorr1995
la source
1
il y avait tellement de solutions trompeuses là-bas et cela a fonctionné tout de suite
3
Activer les modules Magento: module bin / magento: activer --all - A fonctionné pour moi
Agnes
NON! Ce n'est pas une bonne pratique! module bin / magento: enable --all is like chmod -R 777 :(
Kārlis Millers
6

J'ai eu cette erreur et elle a été résolue en effaçant le dossier var puis en l'exécutant setup:upgrade. Si cela ne le résout pas, recherchez les erreurs dans les di.xmlfichiers

Claudiu Creanga
la source
travaillé pour moi, en particuliervar/cache
Joshua Soileau
Merci a redis-cli flushallfonctionné pour moi.
Sarjan Gautam
5

Exécutez la commande suivante et vérifiez.

rm -rf generated

rm -rf var/*

A travaillé pour moi.

Kazim Noorani
la source
2

Cela a fonctionné pour moi:

 sudo apt-get install php-intl

 sudo service apache2 reload
abahet
la source
1

Dans mon cas, j'ai dû supprimer un module et j'ai simplement supprimé les fichiers du module sans suivre les méthodes appropriées, puis cette erreur était partout à l'écran. Après avoir beaucoup cherché, j'ai fini par remplacer les fichiers du module dans le même répertoire et j'ai supprimé tous les dossiers requis de var et j'ai exécuté les commandes suivantes.

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

et tout était réparé. J'ai ensuite suivi les bonnes méthodes pour retirer le module. J'espère que cela fera gagner du temps à quelqu'un. :-)

MTM
la source
1

Vider le cache rm -rf var/cache

Si redis est activé, effacez redis db à l'aide de la ligne de commande:

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

va résoudre votre problème

Dexture
la source
0

Dump compositeur autoload fichiers:

$ composer dumpautoload

Alors:

bin/magento setup:upgrade
bin/magento setup:di:compile
user80131
la source
0

Cette erreur est créée lorsque vous essayez de créer (nouveau) un objet (classe) qui est en fait et interface. Cela se produit normalement lorsque vous n'avez pas remplacé l'interface d'une classe dans le fichier di.xml. Ou avez remplacé le dans le di.xml dans le répertoire adminhtml et essayez d'utiliser l'interface dans le frontend.

interface MyInterface{
   pubic function getVariable(): int
}

class MyClass 
implements MyInterface{

   protected $variable;

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

$variable = new MyInterface();
Dallas Clarke
la source