2016-01-24 2 views
25

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

Uncaught ReflectionException: Class log does not exist

Я бегу Laravel 5.2 на Centos 7.

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

  • Удаление пространств в файле .env.
  • Удаление исходного каталога Vendor & переустановке
  • Удаление некоторых пакетов, необходимых в 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 

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

+0

Я буду смотреть этот ответ тоже, так как я у нас была аналогичная проблема. Я нахожусь на laravel 5.1.28 и недавно сделал обновление для композитора в первый раз за короткое время, и с тех пор я получаю эту ошибку для сборки для создания на героку. Я отменил изменение композитора.json, которое я сделал, но, как предполагалось, никаких изменений; это как-то связано с allll обновлениями, которые были втянуты в продавца :( –

+0

@DianeKaplan Я отправил вам ответ, чтобы направить ваши глаза. Это помогло мне отследить мою ошибку ... – jakehallas

+0

спасибо, @jakehallas! m, используя postgres- вам известно, есть ли подобное расширение, которое мне понадобится, или оно достаточно конкретное, что моя проблема, вероятно, что-то еще? Я полный новичок, поэтому такие проблемы - выход из моей зоны комфорта:/ –

ответ

34

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

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

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

+1

Да, это молчаливое поведение Ларавеля ... У меня была эта проблема, и в моем случае мне пришлось установить расширения php-mbstring и php-xml. Поэтому, если я вижу эту ошибку, я проверяю и устанавливаю расширения, которые требуются здесь: https://laravel.com/do cs/5.2 (Требования к серверу) или другие, если они требуются пакетами. –

+0

Как вы на самом деле решили проблему? – fabian

+2

Я установил недостающий пакет php 'php-mysql' – jakehallas

20

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

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

DB_USERNAME=homestead 

это не не допускаются

DB_USERNAME=home stead 

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

DB_USERNAME="home stead" 

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

+0

Спасибо за этот ответ. Пробелы, возможно, не вызвали проблему для вопросника, но это определенно вызвало мое. Этот ответ удерживал меня от того, что выглядело бы длинно затянутой гусиной погоней. –

1

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

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

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

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

3

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

APP_YOUR_NAME="A value with some spaces"

1

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

12

Основная ошибка выявляется путем изменения vendor/laravel/framework/src/Illuminate/Container/Container.php и размещение следующих в верхней части: (. Кредит https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist/replies/160902 этой идеи)

<?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. 

    //... 
} 

Чтобы добавить в список корневых причин для это сообщение, определяющее замыкание в конфигурационном файле и, вызвавшее это событие php artisan config:cache, приведет к этому (по крайней мере, в Laravel 5.1). Решение для этого манифестации: не определяйте замыкания в конфигурационных файлах Laravel, за https://github.com/laravel/framework/issues/9625.

+1

В этом обзоре было высказано реальное исключение - это было то, что я пытался использовать метод, который использовал Facade в файле конфигурации (config /). – king

+0

Это помогло, но не решило всю проблему.Я также получил ошибку, что класс конфигурации отсутствует, помог добавив это после того, как класс журнала: встроенный класс 'конфигурации расширяет \ Осветите \ Log \ Writer { \t \t функция __construct() \t \t { \t \t \t $ this-> Монолог = новый Монолог («локальный»); \t \t} \t общественной функция прибудет ($ тест, $ test2) \t { \t \t \t возвращения $ теста; \t \t} \t} } ' – Jadro007

+0

Добавить строку' $ this-> monolog-> pushHandler (новый \ Монолог \ Handler \ StreamHandler ('/ TMP/log.txt')); 'на самом деле написать журнал, который может выявить причину – Alex

0

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

SITE_DESCRIPTION = Social Network for dogs 

заменить его

SITE_DESCRIPTION = 'Social Network for dogs' 
1

EDIT ::

Потому что я не был удовлетворен, а неуклюжий отладки и доработки путей, и т. д., чтобы заставить виртуальную машину работать плавно, я размышлял над процессом и переустанавливал бродячий ящик laravel/homestead (virtualbox 1.0.1)

Для меня проблема возникла из-за отсутствия запятой в config/app.php. Пропущенная запятая, вероятно, остановила процесс компиляции и выплюнула ошибку Uncaught ReflectionException: Class log does not exist.


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

система: MacOS Sierra

Бродячей: 1.9.1 (последнюю версию на время написания)

VM: Laravel/усадьбу (virtualbox 0.4.0)

Laravel Версия: 5.1.*

PHP: 7.0.*


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

  1. перезаписи, удаления .env для потенциальных проблем синтаксического анализа
  2. php7.1 и Mcrypt/mbstring issues
  3. установка предложенных композитором пакетов
  4. Обновление усадьбы.Р.Б.
  5. связанные с PATH вопросы

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

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
0

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

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

3

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

EDIT:

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

+0

Вы экономите свое время, спасибо –

0

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

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

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

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

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

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

Спасибо ...

Смежные вопросы