Php 未捕获的ReflectionException:类日志不存在Laravel 5.2

Php 未捕获的ReflectionException:类日志不存在Laravel 5.2,php,laravel,centos7,laravel-5.2,Php,Laravel,Centos7,Laravel 5.2,我目前正在尝试从github克隆我的一个现有项目。克隆后,我运行composer install,在此过程中,我收到以下错误: 未捕获的反射异常:类日志不存在 我正在Centos 7上运行Laravel 5.2 我看到有人提到: 删除.env文件中的空格 删除供应商目录并重新安装 删除composer.json中所需的某些包 我有: 将我的.env替换为示例.env,以避免任何自定义配置错误 我已删除并重新克隆了回购协议 我使用了Laravel附带的默认composer.json,看看这是

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

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

我正在Centos 7上运行Laravel 5.2

我看到有人提到:

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

  • 将我的
    .env
    替换为
    示例.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

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

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

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

此异常仅表示Laravel试图记录错误,但无法实例化Laravel的
log
类。这不是因为日志类四处走动或隐藏。这是因为Laravel仍在进行引导过程&尚未加载
Log

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


在所有版本的Laravel中都发生过这是我们在.env文件中看到Laravel 5.1中引发异常的唯一原因。请确保没有空格来存放值

例如,这是允许的

DB_USERNAME=homestead
这是不允许的

DB_USERNAME=home stead
如果有空格,可以将值括在引号中

DB_USERNAME="home stead"

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

我在CLI中键入了一个CMD,却意外地在app config文件中键入了它。为了找到问题,我必须遵循这个程序

解决方案,如何发现问题:

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

在我的.env文件中添加了几行之后,我注意到了同样的行为。不允许在没有引号的情况下使用空格,因此可以将其固定为:


APP\u YOUR\u NAME=“带有一些空格的值”

在我的例子中,PDO扩展的缺失就是问题所在。安装后,问题得到了解决。

通过修改供应商/laravel/framework/src/illighte/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.

    //...
}

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

SITE_DESCRIPTION = Social Network for dogs
你把它换成

SITE_DESCRIPTION = 'Social Network for dogs'

编辑::

因为我不满意让虚拟机平稳运行的相当笨拙的调试和返工路径等,所以我反思了这个过程,重新安装了vagrant box laravel/homestead(
virtualbox 1.0.1

对我来说,这个问题可能源于
config/app.php
中缺少一个逗号。缺少的逗号可能会停止编译过程,并抛出
未捕获的ReflectionException:Class log不存在
错误


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

系统:macOS Sierra

流浪汉:
1.9.1
(撰写本文时的最新版本)

VM:laravel/homestead(
virtualbox 0.4.0

Laravel版本:
5.1.*

PHP:
7.0.*


在反复尝试解决问题后,包括:

  • 重写、删除潜在解析问题的.env
  • php7.1和mcrypt/mbstring问题
  • 安装composer建议的软件包
  • 更新homestad.rb
  • 路径相关问题
  • 关键的是,(对我来说)它似乎是初始设置中的virtualbox版本:

    流浪者箱添加laravel/宅地

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

    vagrant box add laravel/homestad
    --box版本0.4.0


    杂项

    我尝试了以下
    laravel/homestead
    virtualbox版本,但失败了:

    • 1.0.1
      (默认)
    laravel/homestead-7

    • 0.2.1

    在我的例子中,我在配置文件中使用了
    route()
    方法。显然,这种方法不起作用,因为这些文件不使用Lightlight Helper,它们是带有数据的simple.php


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

    删除文件
    bootstrap/cache/config.php
    。此文件可能不会显示在windows上,如果是,请使用double commander。肯定会成功的

    编辑:

    它可能是由cac引起的
    Uncaught ReflectionException: Class log does not exist
    
    <?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",
        ],
    ]
    ];
    
    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 config:clear
    php artisan cache:clear
    composer dump-autoload
    php artisan clear-compiled
    
    rm /var/www/html/bootstrap/cache/compiled.php
    composer dump-autoload
    
    Route::get('/config-cache', function() {
        Artisan::call('config:cache');
        return '<h1>Config cache cleared successfully</h1>';
    });
    
    BUSINESS_RECONCILIATION_DAYS=-8
    
    BUSINESS_RECONCILIATION_DAYS="-8"
    
    composer update
    
    sudo php artisan command