未捕获的反射异常:类日志不存在 Laravel 5.2

2022-08-30 09:56:07

我目前正在尝试从github克隆我的现有项目。克隆后,我在此过程中运行,我收到以下错误:composer install

Uncaught ReflectionException: Class log does not exist

我在 Centos 7 上运行 Laravel 5.2。

我看到过以下参考资料:

  • 删除文件中的空格。.env
  • 删除供应商目录并重新安装
  • 删除 composer.json 中所需的某些包

我有:

  • 已将 my 替换为,以避免任何自定义配置错误。.envexample.env
  • 我已经删除并重新克隆了存储库。
  • 我使用了Laravel附带的默认值,看看这是否会有所作为。composer.json

以上这些都没有给我带来任何快乐。我还在另一台计算机上设置了相同的环境,应用程序工作正常。这里唯一的区别是机器(工作)不是从git克隆的 - 它是最初的构建环境。

我收到的堆栈跟踪:

PHP Fatal error:  Uncaught ReflectionException: Class log does not exist in /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php:736
    Stack trace:
    #0 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(736): ReflectionClass->__construct('log')
    #1 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(631): Illuminate\Container\Container->build('log', Array)
    #2 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(674): Illuminate\Container\Container->make('log', Array)
    #3 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(845): Illuminate\Foundation\Application->make('log')
    #4 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(800): Illuminate\Container\Container->resolveClass(Object(ReflectionParameter))
    #5 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(769): Illuminate\Container\Container->getDependenc in /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 736

任何帮助将不胜感激。提前致谢。


答案 1

好的,经过几个小时的挖掘,我的问题的解决方案已经找到。我之所以说我的问题,是因为这是非常错误的。Exception

Uncaught ReflectionException: Class log does not exist

此异常仅表示 Laravel 尝试记录错误,但无法实例化 Laravel 的类。这不是由于 Log 类进行走动或隐藏。这是因为Laravel仍在执行其启动过程,并且尚未加载该类。LogLog

因此,之所以引发此异常,是因为在 Laravel 的引导周期中发生了错误 - 当此错误发生时,它试图引发异常 - 但它无法引发异常,因为该类尚未被加载。因此,我们得到一个LogReflectionException

发生在所有版本的Laravel中,我们看到laravel 5.1中抛出的异常的唯一原因是<=是因为以前Laravel默默地丢弃了问题并继续进行其启动过程 - 基本上,您的应用程序仍然会中断,但是您不会收到.Log class exception

在我的特定情况下,我没有安装扩展,导致Laravel在启动过程中中断。php-mysql

最终,由于错误非常错误,调试您可能做错了什么是非常困难的。

我希望这对某人有所帮助!

编辑:关于如何调试此错误并找出哪个缺少的扩展/组件实际上导致了问题,请查看@Ben Johnson的答案。


答案 2

在 .env 文件中,确保没有值空间

例如,这是允许的

DB_USERNAME=homestead

这是不允许的

DB_USERNAME=home stead

如果您有空格,则可以将值括在引号中。

DB_USERNAME="home stead"

真的希望他们使用json作为.env文件,也许我们应该请求该功能


推荐