致命错误:无法实例化接口


12

我的magento商店抛出此错误:

致命错误:无法在第73行上的/Library/WebServer/Documents/magento/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php中实例化接口Magento \ Framework \ View \ Design \ Theme \ ResolverInterface

我不知道为什么它开始出现。我没有安装新模块。这家商店运作良好。

我已经检查了文件权限,但没有发现任何问题。还删除/ var /目录,以及我创建的所有文件夹/文件。

[编辑]首选项已定义为vendor / magento / magento2-base / app / etc / di.xml

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

1
我希望在您的自定义模块中或对您尝试在构造函数或对象管理器中使用Magento \ Framework \ View \ Design \ Theme \ ResolverInterface的代码进行编码
Pradeep Kumar

@PradeepKumar不,我不是。
FilipeSá2015年

2
清除缓存和中的内容var/generation
马吕斯

如问题中所述,@ Marius,我已经完全删除了/ var / *文件夹。
FilipeSá15年

抱歉。我错过了那条线。
马吕斯

Answers:


23

如果使用redis,请运行:


redis-cli flushall



如果您还使用ansible(lxc - server)之类的环境,则需要在容器中执行该命令。另外,我执行了以下操作:

  • 明确 var/generation
  • 明确 var/cache
  • 启用Magento模块: bin/magento module:enable --all
  • 编译DI bin/magento setup:di:compile

1
有这么多令人误解的解决方案,并且马上就

3
启用Magento模块:bin / magento模块:启用--all-为我工作
Agnes

没有!这不是一个好习惯!bin / magento模块:启用
–KārlisMillers



2

这为我工作:

 sudo apt-get install php-intl

 sudo service apache2 reload

1

就我而言,我必须删除一个模块,而只是删除该模块的文件而不遵循适当的方法,然后此错误在屏幕上无处不在。经过大量搜索之后,我最终将模块的文件替换回相同的目录,并从var中删除了所有必需的文件夹,并运行了以下命令。

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

一切都固定了。然后,我按照正确的方法删除了模块。希望这可以节省别人的时间。:-)


1

清除缓存 rm -rf var/cache

如果启用了redis,请使用命令行清除redis db:

$> redis-cli
$> flushall

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

将解决您的问题


0

转储作曲家 自动加载文件:

$ composer dumpautoload

然后:

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


0

当您尝试创建(新)实际上是接口的对象(类)时,将创建此错误。当您没有覆盖di.xml文件中的类的接口时,通常会发生这种情况。或已覆盖adminhtml目录中di.xml中的,并尝试使用前端中的接口。

interface MyInterface{
   pubic function getVariable(): int
}

class MyClass 
implements MyInterface{

   protected $variable;

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

$variable = new MyInterface();

0

此错误也可能是由于直接在app / etc / config.php中启用或禁用模块,尤其是在启用或禁用核心Magento模块时。在这种情况下,最好的办法是清除缓存,刷新redis缓存,重新启动varnish和php-fpm。而且有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.