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

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

Uncaught ReflectionException: Class log does not exist

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

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

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

У меня есть:

  • .env мой .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 

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

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

Uncaught ReflectionException: Class log does not exist

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

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

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

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

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

Я надеюсь, что это помогает кому-то!

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

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

 DB_USERNAME=homestead 

это не запрещено

 DB_USERNAME=home stead 

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

 DB_USERNAME="home stead" 

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

Основная ошибка обнаруживается путем изменения 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 .

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

APP_YOUR_NAME="A value with some spaces"

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

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

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

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

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

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

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

Поскольку меня не устраивали довольно неуклюжие пути отладки и переделки и т. Д., Чтобы заставить виртуальную машину работать плавно, я размышлял над процессом и переустанавливал бродячий ящик 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. установка предлагаемых композитором пакетов
  4. обновление homestead.rb
  5. Проблемы, связанные с PATH

Критически (для меня) казалось, что это была версия виртуального бокса в начальной настройке:

vagrant box add laravel/homestead

Вместо этого попробуйте указать номер версии следующим образом:

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


разное :

Я попытался и потерпел неудачу со следующими laravel/homestead :

  • 1.0.1 (по умолчанию)

и laravel/homestead-7 :

  • 0.2.1

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

 SITE_DESCRIPTION = Social Network for dogs 

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

 SITE_DESCRIPTION = 'Social Network for dogs' 

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

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

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

 Uncaught ReflectionException: Class log does not exist 

Эта ошибка включает версии laravel 5.2 &>:

Мои ошибки:

Советы1: когда вы отсутствуете (;) конец вашего кода в файле конфигурации

Другой синтаксис Ошибка Эта ошибка возникает.

Мой код ошибки:

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

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

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

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

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

Благодаря …