如何使用消息 'Class log does not exist' 修复未捕获的异常 'ReflectionException'?

How to fix Uncaught exception 'ReflectionException' with message 'Class log does not exist'?

我在 Windows Server 20012 R2 上遇到作曲家问题。我正在尝试部署一个网站,每次 运行 composer installcomposer update 我都会得到以下信息:

$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Generating autoload files
> Illuminate\Foundation\ComposerScripts::postInstall
> php artisan optimize
Script php artisan optimize handling the post-install-cmd event returned with an error


  [RuntimeException]
  Error Output:


install [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--ignore-platform-reqs] [--] [<packages>]...

当我检查 php 错误日志 时,我发现以下内容:

[17-Jul-2016 08:04:58 UTC] PHP Fatal error:  Uncaught exception 'ReflectionException' with message 'Class log does not exist' in C:\PATH_TO_PROJECT\vendor\laravel\framework\src\Illuminate\Container\Container.php:734
Stack trace:
#0 C:\PATH_TO_PROJECT\vendor\laravel\framework\src\Illuminate\Container\Container.php(734): ReflectionClass->__construct('log')
#1 C:\PATH_TO_PROJECT\vendor\laravel\framework\src\Illuminate\Container\Container.php(629): Illuminate\Container\Container->build('log', Array)
#2 C:\PATH_TO_PROJECT\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(697): Illuminate\Container\Container->make('log', Array)
#3 C:\PATH_TO_PROJECT\vendor\laravel\framework\src\Illuminate\Container\Container.php(849): Illuminate\Foundation\Application->make('Psr\Log\LoggerI...')
#4 C:\PATH_TO_PROJECT\vendor\laravel\framework\src\Illuminate\ in C:\PATH_TO_PROJECT\vendor\laravel\framework\src\Illuminate\Container\Container.php on line 734

当我在 Ubuntu 服务器 上尝试同一个项目时,一切正常!我已经尝试了我可以在互联网上找到的所有答案,但对我没有任何帮助。关于如何解决这个问题的任何建议?为什么会这样?

windows 服务器 PHP 版本是 5.6。

composer.json 文件:

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.5.9",
        "laravel/framework": "5.2.*",
        "intervention/image": "^2.3",
        "greggilbert/recaptcha": "2.*",
        "laravelcollective/html": "5.2.*",
        "vsch/laravel-translation-manager": "*"
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~4.0",
        "symfony/css-selector": "2.8.*|3.0.*",
        "symfony/dom-crawler": "2.8.*|3.0.*"
    },
    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\": "app/"
        },
         "files": ["app/Http/Helpers/helpers.php"]
    },
    "autoload-dev": {
        "classmap": [
            "tests/TestCase.php"
        ]
    },
    "scripts": {
        "post-root-package-install": [
            "php -r \"copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ],
        "post-install-cmd": [
            "Illuminate\Foundation\ComposerScripts::postInstall",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "Illuminate\Foundation\ComposerScripts::postUpdate",
            "php artisan optimize"
        ]
    },
    "config": {
        "preferred-install": "dist"
    }
}

你试过了吗 composer dump-autoload?

你可以添加一个 class 没有 dump-autoload

我能想到的导致此错误发生的最常见原因如下:

  1. Log class 在不包含在 USE 语句中的范围内被调用。
  2. 配置文件包含(解析)错误,这反过来又不允许您的应用程序找到日志 class。检查 Laravel 早期加载的文件,例如 app.php.

我能够通过删除 .env 文件中值中的任何 space 来解决这个问题,例如:

MAIL_PORT= 587
MAIL_FROM_NAME=ABC Medical

至:

MAIL_PORT=587
MAIL_FROM_NAME=ABCMedical

或使用引号:

MAIL_PORT=587
MAIL_FROM_NAME="ABC Medical"

我在不带引号的 .env 中传递带空格的值时出现此错误,我通过将值括在引号中修复了它。