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
Любая помощь будет высоко оценена. Заранее спасибо.
Ответы
Ответ 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:
и laravel/homestead-7
:
Ответ 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]()
это была синтаксическая ошибка, но она не отображалась.