Подтвердить что ты не робот

Uncaught ReflectionException: Журнал классов не существует Laravel 5.2

В настоящее время я пытаюсь клонировать существующий проект my из github. После клонирования я запускаю composer install во время процесса, я получаю следующую ошибку:

Uncaught ReflectionException: Class log does not exist

Я запускаю Laravel 5.2 на Centos 7.

Я видел ссылки на:

  • Удаление пробелов в файле .env.
  • Удаление каталога поставщика и повторная установка
  • Удаление некоторых пакетов, необходимых в composer.json

У меня есть:

  • Замените мой .env на example.env, чтобы избежать каких-либо пользовательских ошибок конфигурации.
  • Я удалил и повторно клонировал репо.
  • Я использовал по умолчанию composer.json, поставляемый с Laravel, чтобы узнать, имеет ли это значение.

Ничто из перечисленного не принесло мне радости. У меня также есть одна и та же среда, настроенная на другой машине, при этом приложение отлично работает. Единственная разница здесь в том, что машина (рабочая) не была клонирована из 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

Любая помощь будет высоко оценена. Заранее спасибо.

4b9b3361

Ответ 1

Хорошо, после многих часов рытья решение для моей проблемы найдено. Причина, по которой я говорю, что моя проблема связана с тем, что Exception является очень неверным.

Uncaught ReflectionException: Class log does not exist

Это исключение просто означает, что Laravel попытался зарегистрировать ошибку, но не смог создать экземпляр класса Laravel Log. Это происходит не из-за того, что класс Log идет по улицам или скрывается. Это связано с тем, что Laravel продолжает процесс загрузки и еще не загрузил класс Log.

Итак, это исключение вызывается из-за ошибки во время цикла загрузки Laravel - когда эта ошибка произошла, он попытался выставить исключение, но он не может генерировать исключение, поскольку класс Log еще не загружен, Следовательно, мы получаем a ReflectionException

Это произошло во всех версиях Laravel, единственная причина, по которой мы видели исключение, заброшенное в laravel 5.1 < =, потому что ранее Laravel молча отбрасывал проблему и выполнял ее процесс загрузки - в основном, ваше приложение все равно сломается, но вы не получите Log class exception.

В моем конкретном случае у меня не было установленного расширения php-mysql, которое заставляло Laravel ломаться во время его процесса загрузки.

В конечном счете, невероятно сложно отлаживать то, что вы, возможно, сделали неправильно, потому что ошибка была очень неверной.

Надеюсь, это поможет кому-то!

Ответ 2

В вашем файле .env убедитесь, что у вас нет пробелов для значений

например это разрешено

DB_USERNAME=homestead

это не разрешено

DB_USERNAME=home stead

Вы можете заключить значение в кавычки, если у вас есть пробелы.

DB_USERNAME="home stead"

очень жаль, что они не использовали json для файла .env, может, нам стоит запросить эту функцию

Ответ 3

Основная ошибка обнаруживается путем изменения 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). Решение для этого манифестации: не определяйте замыкания в конфигурационных файлах Laravel, за https://github.com/laravel/framework/issues/9625.

Ответ 4

Удалите файл bootstrap/cache/config.php. Этот файл может не отображаться в Windows, если это так, используйте, например, double commander. Определенно будет работать!

РЕДАКТИРОВАТЬ:

Это может быть вызвано кэшированием .env файла, если это ваш случай, попробуйте удалить bootstrap/cache/config.php

Ответ 5

Я заметил такое же поведение после добавления нескольких строк в мои .env файлы. Пробелы не допускаются без кавычек, и поэтому это можно зафиксировать следующим образом:

APP_YOUR_NAME="A value with some spaces"

Ответ 6

В моем случае проблема с отсутствием расширения PDO была проблемой. После его установки проблема была исправлена.

Ответ 7

ИЗМЕНИТЬ::

Поскольку меня не устраивали довольно неуклюжие пути отладки и переделки и т.д., чтобы заставить виртуальную машину работать плавно, я размышлял над процессом и переустанавливал бродячий ящик 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.*


После неоднократных попыток решить проблему, которая включает в себя:

  • переписывание, удаление .env для возможных проблем синтаксического анализа.
  • php7.1 и проблемы с mcrypt/mbstring
  • установка предлагаемых композитором пакетов
  • обновление homestead.rb
  • Проблемы, связанные с 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

Ответ 8

Я вводил CMD в CLI и случайно набрал его в файле конфигурации приложения. Я должен был следовать этой процедуре, чтобы найти проблему.

Решение, как найти проблему:

  • сделайте резервную копию папки config. попробуйте удалить одну конфигурацию с помощью
  • и попробуйте запустить команду Composer/Artisan. Когда вы
  • найти файл, который не удалось - поиск строки, которая может завершиться неудачей.
  • Причина, почему это не удалось: вы используете константу класса, которая не загружена
  • еще. Вы используете класс/функцию, которая еще не загружена. и т.д.

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

Ответ 9

Также это связано с сильной синтаксической ошибкой в файле conf/directory или .env. В моем случае я получил эту ошибку, потому что я забыл положить ::class в конце строки при добавлении поставщика услуг и фасада к поставщикам массивов и зависеть от файла conf/app.php. Я исправил это, и ошибка исчезла.

Ответ 10

Эта проблема обычно вызвана пробелами между словами в файле .env. Убедитесь, что у вас есть что-то вроде

SITE_DESCRIPTION = Social Network for dogs

вы замените его на

SITE_DESCRIPTION = 'Social Network for dogs'

Ответ 11

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",
    ],
]
];

Ответ 12

Эта ошибка может быть вызвана ошибкой в одном из файлов конфигурации. Чтобы определить, какой файл вызывает его, измените функцию loadConfigurationFiles в /vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php на:

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, и последний загружающий "ключ" - это файл конфигурации, вызывающий ошибку. Исправьте это и не забудьте удалить команду var_dump... Удачи.

Ответ 13

У меня была такая же проблема, и ни одно из решений здесь не сработало

Я обнаружил, что существует исключение разрешения на доступ к папке config

После исправления разрешения все заработало!


Как это понять?

Поставьте точку vendor/laravel/framework/src/illluminate/Foundation/Http/Kernel.php

линия 101 внутри защелки функции ручки.

Вот как я узнал об отказе в разрешении.

Ответ 14

Я думаю, что при обновлении композитора Laravel делает некоторые проверки.

  • Установите пакет "unzip" ("sudo apt install unzip"), если он не установлен.
  • Проверьте все необходимые расширения, такие как "mysql", "json", "curl", "xml", "zip" и т.д., И установите ("sudo apt install php7.1-mysql"), если он не установлен.
  • Проверьте права доступа к файлу/папке.
  • Проверьте файл ".env".
  • Проверьте ваши файлы "config".
  • Запустите "Обновление композитора" снова.

Установка unzip у меня работает. Удачи :)

Ответ 15

В моем случае я использовал метод route() в файле конфигурации. Очевидно, что этот метод не работает, потому что эти файлы не используют Illuminate Helper, они простые .php с данными.

Файлы конфигурации считываются до создания экземпляра класса журнала, что вызывает ошибку Jakehallas.

Ответ 16

Да, как сказал @jakehallas. Это не связано с тем, что отображается в исключении.

На самом деле, если есть какая-либо проблема с дабабазой или другая проблема с переменными configil вызывает это.

Собственно, когда я пытался что-то изменить в файле database.php, я просто дублировал тот же файл, что и database-copy.php. Я не ответил на эту проблему.

Пройдя через то, что я сделал до того, как просто удалил этот файл database-copy.php, он отлично работает.

Спасибо...

Ответ 17

Решил эту проблему после удаления пробела в файле .env (просмотрите .env в возвышенном, потому что редактор vi не показывает пробел в конце файла .env.) И запустите команды ниже.

Команды:

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

Ответ 18

Я перепробовал множество решений, представленных здесь и в других местах. Это не сработало для меня. Я решил это, вручную удалив /var/www/html/bootstrap/cache/compiled.php и обновив файлы автозагрузки:

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

Ответ 19

Этот тип ошибки, когда вы пропустили какую-либо из зависимостей вашего проекта. Запустите php composer.phar update

Ответ 20

Запустите php artisan config:cache решил это за меня.

Или, если вы используете общий хостинг без доступа к Terminal/CMD, добавьте это в файл Routs.php:

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

Затем перейдите на yourdomain.com/config-cache для запуска этого скрипта.

Ответ 21

Так как никто еще не упомянул оркестр /testbench, я решил добавить решение моей проблемы.

Я писал пакет Laravel, когда получил эту ошибку в одном из моих модульных тестов. Я использовал orchestra/testbench чтобы включить тестирование специфичных для Laravel частей кода.

Проблема была просто в том, что тестовый класс расширял PHPUnit\Framework\TestCase вместо Orchestra\Testbench\TestCase.

Ответ 22

У меня было какое-то отрицательное значение, как

BUSINESS_RECONCILIATION_DAYS=-8

Мне нужно было завернуть

BUSINESS_RECONCILIATION_DAYS="-8"

Ответ 23

В моем случае запятая отсутствует в моем конфигурационном файле (config/app.php) после того, как я слил свою ветку с master.

my code snippet

это была синтаксическая ошибка, но она не отображалась.