Laravel错误-类setEventDispatcher不存在

时间:2018-12-28 20:41:00

标签: laravel

简短版

运行php artisan serve并访问我的主页时出现此错误:

ReflectionException (-1)
Class setEventDispatcher does not exist

详细信息

Laravel版本:5.6.39 环境:当地 操作系统:macOS Mojave 10.14.2

当我在另一个项目中使用npm时出错时,它开始了,所以我重新安装了节点(this way)

执行完该操作后,将无法启动该项目(有问题的)。运行php artisan serve时出现此错误:

dyld: Library not loaded: /usr/local/lib/libpng16.16.dylib with anything php related
Referenced from: /usr/local/bin/php
Reason: image not found

该错误已由updating and upgrading brew解决。

然后,我能够启动项目(php artisan serve)。但是当我访问主页时,显示此错误:

ReflectionException (-1)
Class setEventDispatcher does not exist

如果我遵循堆栈跟踪,那么我可以看到正是这一行(来自我的homeController)触发了错误:

if( ! Auth::check() ){
  return view( 'pages.home' );
}

如果我将其注释掉,则从另一个使用Auth模块的位置发生了同样的错误。

这是堆栈跟踪:

setEventDispatcher does not exist error

有人知道如何解决这个问题吗?我在Google上找不到任何有希望的结果,而且我也不知道为什么会这样...:-/

加法1

我尝试了composer clear-cache并删除了供应商文件夹,然后执行了composer install,问题仍然出现。

我也按照Marcus的建议检查了我的服务提供商-但我真的不知道在那里寻找什么。一切看起来都很规律(没有花哨的if陈述或其他内容)。

添加2

我意识到,我无法使用Sequel Pro连接到数据库。这是因为Brew将我的MySQL版本从5.5更新到了8.0。

这是通过按照以下方式做 来解决的(我做了很多事情,所以我可能缺少很多步骤):

brew unlink mysql
brew install mysql@5.7
brew switch mysql 5.7.21
brew link mysql

,然后我可以使用mysql --version验证版本。该MySQL版本更改也存在一些权限问题,但是我正在发出该消息,因此不会太久。

Addition3

我尝试禁用Laravel Debugbar(通过从composer.json删除,删除composer.lockvendor然后运行composer install)。这样就解决了! ...但是!

后来我尝试安装Barryvdh的IDE Helper时,又出现了完全相同的错误 !!

我执行了以下三个步骤,以安装IDE Helper(并重新引入错误):

  1. 从我的目录的根目录运行此命令:curl https://gist.githubusercontent.com/barryvdh/5227822/raw/4be028a27c4ec782965bb8f2fdcb4c08c71a441d/_ide_helper.php -o _ide_helper.php

  2. 将这些行添加到app/Provider/AppServiceProvider.php

...

if ($this->app->environment() !== 'production') {
  $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
}
  1. 运行以下命令:composer require --dev barryvdh/laravel-ide-helper

所以我回到了这个错误:

ReflectionException (-1)
Class setEventDispatcher does not exist

...堆栈跟踪与先前显示的相同(从Container.php弹出)。

7 个答案:

答案 0 :(得分:3)

尝试了所有解决方案,但没有一个起作用。

最后,我意识到,当尝试将php升级到7.3.3时,它实际上是导致失败的网络错误。阅读日志,再次尝试,重新启动代客服务,然后再次尝试。

现在可以使用。

升级到7.3.3确实是解决方案。

谢谢!

答案 1 :(得分:2)

这就是通常为我解决的问题

  1. 通过删除供应商文件夹和composer.lock重新安装composer依赖项。然后运行function ajaxObj( meth, url ) { var x = new XMLHttpRequest(); x.open( meth, url, true ); x.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); return x; } function ajaxReturn(x){ if(x.readyState == 4 && x.status == 200){ return true; } ,然后运行composer clear-cache(通常是问题所在)

  2. 检查所有服务提供商是否已正确导入到app.php中的目录config下

  3. 确保您的服务提供商没有导入不存在的内容,例如,如果您在生产中注册了服务提供商,但仅作为dev安装:

    composer install

答案 2 :(得分:2)

如果您使用代客服务,我会解决

valet restart,一切正常。

欢呼!

答案 3 :(得分:1)

对我来说,解决方法是将PHP更新到7.3.3,然后重新启动valet。显然,这是php 7.3的错误

https://github.com/laravel/framework/issues/27052

希望这会有所帮助

答案 4 :(得分:0)

我有个主意...在重新配置apache虚拟主机端口后,我刚刚遇到了这个问题,所以我再次重新启动了apache / httpd,问题消失了。可能与服务器环境有关吗?

答案 5 :(得分:0)

我在Mac Book Pro中面临相同的问题。我的系统配置是PHP 7.3,MySQl,并且使用SQL Pro。我已经实现了上述所有方法,但是没有任何效果。 对于我来说,这个问题仍然是个谜,但是对于暂时的问题,我已经使用 工匠的命令如下。

  

php工匠服务

它可以让我在http://localhost:8000上运行项目 希望这可以解决这个问题。

答案 6 :(得分:0)

尝试重新启动PHP。当我重新启动Mac时,就会发生这种情况。重新启动PHP后,一切都会开始工作。

sudo brew services restart nginx