Uncaught ReflectionException:类日志不存在Laravel 5.2

问题描述 投票:39回答:20

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

Uncaught ReflectionException: Class log does not exist

我在Centos 7上运行Laravel 5.2。

我看过参考文献:

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

我有:

  • .env替换了我的example.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

任何帮助将非常感激。提前致谢。

php laravel centos7 laravel-5.2
20个回答
50
投票

好的,经过几个小时的挖掘,找到了我的问题的解决方案。我说我的问题的原因是因为Exception非常错误领导。

Uncaught ReflectionException: Class log does not exist

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

因此,抛出此异常是因为在Laravel的引导周期期间发生了错误 - 当发生此错误时它试图抛出异常 - 但它不会抛出异常,因为Log类尚未被加载。因此我们得到一个ReflectionException的原因

在Laravel的所有版本中都发生了这种情况,我们看到laravel 5.1中抛出的异常的唯一原因是<=是因为之前Laravel默默地放弃了问题并通过其启动过程继续 - 基本上,你的应用程序仍然会破坏但是你不会收到Log class exception

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

最终,由于错误引导错误,调试您可能做错的事情是非常困难的。

我希望这可以帮助别人!


1
投票

此问题通常是由.env文件中的单词之间的空格引起的。确保你有类似的东西

SITE_DESCRIPTION = Social Network for dogs

你替换它

SITE_DESCRIPTION = 'Social Network for dogs'

1
投票
Uncaught ReflectionException: Class log does not exist

此错误来自laravel 5.2&>版本:

我的错误是:

Tips1:当您在配置文件中缺少(;)代码结束时

其他语法错误此错误来了。

我的错误代码:

<?php
return [
'data' => [
    'common' => [
        'AuthKey1' =>  "17086...........9a87a1",
        'AuthKey2' =>  "17086...........9a87a1",
        'AuthKey3'   =>  "17043...........59969531",
    ],
]
]

正确代码:缺少(;)返回结束数组

<?php
return [
'data' => [
    'common' => [
        'AuthKey1' =>  "17086...........9a87a1",
        'AuthKey2' =>  "17086...........9a87a1",
        'AuthKey3'   =>  "17043...........59969531",
    ],
]
];

1
投票

此错误可能是由其中一个配置文件中的错误引起的。要找到导致它的文件,请将/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php中的函数loadConfigurationFiles更改为:

protected function loadConfigurationFiles(Application $app, RepositoryContract $repository)
{
    foreach ($this->getConfigurationFiles($app) as $key => $path) {
        var_dump('loading key: ' . $key . ' -- path: ' . $path);
        $repository->set($key, require $path);
    }
}

运行php artisan,最后一个加载“key”是导致错误的配置文件。纠正它,不要忘记删除你的var_dump命令......祝你好运。


0
投票

就我而言,我在配置文件中使用了route()方法。显然,这种方法不起作用,因为这些文件不使用Illuminate Helper,它们只是带有数据的简单.php。

在实例化Log类之前读取配置文件,这会导致Jakehallas解释得非常好的错误。


0
投票

是的,正如@jakehallas所说。它与例外情况无关。

实际上,如果有任何数据库问题或其他配置变量问题导致此问题。

实际上,当我试图在database.php中更改某些内容时,我只是复制了与database-copy.php相同的文件。我没想到这会引起问题。

在完成我之前所做的事情后,我刚刚删除了这个database-copy.php文件,它的工作正常...

谢谢 ...


0
投票

删除.env文件中的空格后解决了这个问题(在sublime中查看.env,因为vi编辑器在.env文件的末尾没有显示空格。)并在命令下运行。

命令:

php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan clear-compiled

0
投票

我在这里和其他地方尝试了很多解决方案。它对我不起作用。我通过手动删除/var/www/html/bootstrap/cache/compiled.php并更新自动加载文件解决了这个问题:

rm /var/www/html/bootstrap/cache/compiled.php
composer dump-autoload

0
投票

我有同样的问题,这里没有解决方案

我发现config文件夹被拒绝了一个例外

修复权限后一切正常!


怎么算?

vendor/laravel/framework/src/illluminate/Foundation/Http/Kernel.php放一个断点

第101行处理句柄功能。

这就是我发现被拒绝的许可的方式。


0
投票

错过了项目的任何依赖项时出现此类错误。 Runphp composer.phar update


0
投票

运行php artisan config:cache为我解决了它。

或者如果您在共享主机上而无法访问终端/ CMD,请将其添加到您的Routs.php文件中:

Route::get('/config-cache', function() {
    Artisan::call('config:cache');
    return '<h1>Config cache cleared successfully</h1>';
});

然后去yourdomain.com/config-cache运行这个脚本。


33
投票

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

例如,这是允许的

DB_USERNAME=homestead

这是不允许的

DB_USERNAME=home stead

如果有空格,可以用引号括起来。

DB_USERNAME="home stead"

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


0
投票

既然没有人提到orchestra / testbench,我想我只是为我的问题添加解决方案。

当我在我的一个单元测试中遇到这个错误时,我正在写一个Laravel包。我正在使用orchestra/testbench来测试Laravel特定的代码部分。

问题只是测试类扩展PHPUnit\Framework\TestCase而不是Orchestra\Testbench\TestCase


0
投票

我有一些负面价值

BUSINESS_RECONCILIATION_DAYS=-8

我需要包装

BUSINESS_RECONCILIATION_DAYS="-8"

20
投票

通过修改vendor/laravel/framework/src/Illuminate/Container/Container.php并将以下内容置于顶部来揭示潜在错误:

<?php

namespace {
    use Monolog\Logger as Monolog;
    class log extends Illuminate\Log\Writer {
       function __construct()
       {
            $this->monolog = new Monolog("local");
       }
    }
}

//Add curly-braces around the original content, like so:

namespace Illuminate\Container {
    //All original code in this file goes here.

    //...
}

(感谢https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist/replies/160902这个想法。)

要添加到此消息的根本原因列表,在配置文件中定义闭包并随后调用php artisan config:cache将导致此问题(至少在Laravel 5.1中)。此表现形式的解决方案:根据https://github.com/laravel/framework/issues/9625,不要在Laravel配置文件中定义闭包。


10
投票

删除文件bootstrap/cache/config.php。此文件可能不会显示在Windows上,如果是这样,请使用双指令器。 Definitelly会工作!

编辑:

它可能是由缓存.env文件引起的,如果是你的情况,请尝试删除bootstrap/cache/config.php


4
投票

在我的.env文件中添加几行后,我注意到了同样的行为。不带引号的空格,因此可以修复如下:

APP_YOUR_NAME="A value with some spaces"


3
投票

就我而言,缺少PDO扩展就是问题所在。安装后,问题得到解决。


3
投票

编辑::

因为我对相当笨拙的调试和改造路径等不满意以使VM顺利运行,我反思过程并重新安装了流浪盒laravel / homestead(virtualbox 1.0.1

对我来说,问题可能源于config/app.php中缺少逗号。缺少的逗号可能会停止编译过程并吐出Uncaught ReflectionException: Class log does not exist错误。


这不是一个直接的答案,但更多的是作为指导那些冒险进入沉默错误深渊的人

系统:macOS Sierra

Vagrant:1.9.1(撰写本文时的最新版本)

VM:laravel / homestead(virtualbox 0.4.0

Laravel版本:5.1.*

PHP:7.0.*


经过反复尝试解决问题,其中包括:

  1. 重写,删除.env以查找潜在的解析问题
  2. php7.1和mcrypt / mbstring问题
  3. 安装composer建议的包
  4. 更新homestead.rb
  5. PATH相关问题

关键的是,(对我而言)它似乎是初始设置中的虚拟机版本:

vagrant box add laravel/homestead

而是尝试提供版本号,如下所示:

vagrant box add laravel/homestead --box-version 0.4.0


其他:

我试过以下laravel/homestead virtualbox版本并尝试失败:

  • 1.0.1(默认)

laravel/homestead-7

  • 0.2.1

2
投票

我在CLI中输入了一个CMD,并在app配置文件中意外输入了它。我必须遵循这个程序才能找到问题。

解决方案,如何找到问题:

  • 制作配置文件夹的备份副本。尝试删除一个配置
  • 时间并尝试运行失败的composer / artisan命令。当你
  • 查找失败的文件 - 搜索可能失败的行。
  • 它失败的原因是:您使用未加载的类常量
  • 然而。您使用尚未加载的类/函数。等等

https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist?page=2


2
投票

另外,这是由于conf /目录或.env文件中某些文件中的语法错误。在我的情况下,我得到了这个错误,因为我忘了在添加服务提供程序和外观时,将::class放在行的末尾,添加到数组提供程序和conf / app.php文件中的alises。我纠正了这个错误消失了。

© www.soinside.com 2019 - 2024. All rights reserved.