wake-up-neo.net

Nicht erfasste ReflectionException: Klassenprotokoll ist nicht vorhanden. Laravel 5.2

Ich versuche gerade, ein bestehendes Projekt von mir aus Github zu klonen. Nach dem Klonen führe ich während des Prozesses composer install aus und erhalte folgende Fehlermeldung:

Uncaught ReflectionException: Class log does not exist

Ich verwende Laravel 5.2 auf Centos 7. 

Ich habe Verweise gesehen auf: 

  • Leerzeichen in der .env-Datei entfernen. 
  • Entfernen Sie das Herstellerverzeichnis und installieren Sie es erneut
  • Bestimmte in composer.json erforderliche Pakete entfernen 

Ich habe: 

  • Mein .env wurde durch den example.env ersetzt, um benutzerdefinierte Konfigurationsfehler zu vermeiden. 
  • Ich habe das Repo entfernt und erneut geklont. 
  • Ich habe den mit Laravel gelieferten Standard composer.json verwendet, um zu sehen, ob dies einen Unterschied macht. 

Keines der oben genannten Dinge hat mir Freude gemacht. Ich habe auch die gleiche Umgebung auf einem anderen Rechner eingerichtet, und die Anwendung funktioniert einwandfrei. Der einzige Unterschied hier ist, dass die Maschine (funktionierend) nicht von git geklont wurde - es war die ursprüngliche Buildumgebung. 

Die Stack-Spur, die ich empfange: 

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

Jede Hilfe wäre sehr dankbar. Danke im Voraus. 

37
jakehallas

Okay, nach vielen Stunden des Grabens wurde die Lösung für mein Problem gefunden. Der Grund, warum ich mein Problem sage, ist, dass die Exception sehr fehlerhaft ist. 

Uncaught ReflectionException: Class log does not exist

Diese Ausnahme bedeutet einfach, dass Laravel versucht hat, einen Fehler zu protokollieren, konnte jedoch die Log-Klasse von Laravel nicht instanziieren. Dies ist nicht darauf zurückzuführen, dass die Log-Klasse zu Fuß umherstreicht oder sich versteckt. Dies liegt daran, dass Laravel noch den Boot-Prozess durchläuft und die Log-Klasse noch nicht laden muss. 

Diese Ausnahme wird ausgelöst, weil während des Startzyklus von Laravel ein Fehler aufgetreten ist. Wenn dieser Fehler aufgetreten ist, wurde versucht, eine Ausnahme auszulösen. Es kann jedoch keine Ausnahme ausgelöst werden, da die Klasse Log noch geladen ist. Daher erhalten wir eine ReflectionException

Dies ist in allen Laravel-Versionen aufgetreten Der einzige Grund, warum wir gesehen haben, dass die Ausnahme in Laravel 5.1 geworfen wurde, ist, dass Laravel das Problem zuvor unbemerkt verworfen und während des Bootvorgangs durchlaufen hat - im Grunde würde Ihre App jedoch noch kaputt gehen Sie würden den Log class exception nicht erhalten. 

In meinem speziellen Fall hatte ich die Erweiterung php-mysql nicht installiert, wodurch Laravel während des Startvorgangs unterbrochen wurde. 

Letztendlich ist es unglaublich schwierig zu debuggen, was Sie möglicherweise falsch gemacht haben, weil der Fehler sehr falsch war. 

Ich hoffe das hilft jemandem! 

49
jakehallas

Stellen Sie sicher, dass in Ihrer .env-Datei keine Leerzeichen für Werte vorhanden sind

zum Beispiel ist dies erlaubt

DB_USERNAME=Homestead

das ist nicht erlaubt 

DB_USERNAME=home stead

sie können den Wert in Anführungszeichen setzen, wenn Sie Leerzeichen haben.

DB_USERNAME="home stead"

ich wünschte wirklich, sie würden json für die .env-Datei verwenden

30
Richard Torcato

Der zugrunde liegende Fehler wird angezeigt, indem Sie vendor/laravel/framework/src/Illuminate/Container/Container.php ändern und Folgendes wie folgt platzieren:

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

    //...
}

(Kredit an https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist/replies/160902 für diese Idee.)

Wenn Sie die Liste der Hauptursachen für diese Nachricht hinzufügen, wird dies durch das Definieren einer Schließung in der Konfigurationsdatei und, die php artisan config:cache aufruft, verursacht (zumindest in Laravel 5.1). Lösung für diese Manifestation: Definieren Sie keine Schließungen in Laravel-Konfigurationsdateien (per https://github.com/laravel/framework/issues/9625 ).

18
Ben Johnson

Datei bootstrap/cache/config.php entfernen. Diese Datei wird unter Windows möglicherweise nicht angezeigt. Verwenden Sie z. B. Double Commander. Definitiv wird funktionieren!

BEARBEITEN:

Es kann durch die Zwischenspeicherung der .env-Datei verursacht werden. Versuchen Sie in diesem Fall, __.bootstrap/cache/config.php

8
Epsilon47

Ich bemerkte dasselbe Verhalten, nachdem ich meinen .env-Dateien ein paar Zeilen hinzugefügt hatte. Leerzeichen sind ohne Anführungszeichen nicht zulässig. Daher kann dies wie folgt korrigiert werden:

APP_YOUR_NAME="A value with some spaces"

4
Ben

In meinem Fall war die fehlende PDO-Erweiterung das Problem. Nach der Installation wurde das Problem behoben.

3
GarryOne

EDIT ::

Da ich mit dem ziemlich unbeholfenen Debugging- und Nacharbeitspfad nicht zufrieden war, usw., um das VM reibungslos auszuführen, habe ich über den Vorgang nachgedacht und die Vagrant Box Laravel/Homestead (virtualbox 1.0.1)

Bei mir ist das Problem möglicherweise auf ein fehlendes Komma in config/app.php zurückzuführen. Das fehlende Komma hat den Kompilierungsvorgang wahrscheinlich angehalten und den Uncaught ReflectionException: Class log does not exist-Fehler ausgegeben. 


Dies ist keine direkte Antwort, sondern dient eher als Orientierungshilfe für diejenigen, die sich in diesen Abgrund stiller Fehler begeben

System: macOS Sierra

Vagrant: 1.9.1 (letzte Version zum Zeitpunkt des Schreibens)

VM: Laravel/Homestead (virtualbox 0.4.0)

Laravel-Version: 5.1.*

PHP: 7.0.*


Nach wiederholten Versuchen, das Problem zu beheben, gehören:

  1. umschreiben, Entfernen von .env für mögliche Probleme mit der Analyse
  2. php7.1 und die Probleme mit mcrypt/mbstring
  3. installierte Composer-Vorschläge für Pakete
  4. aktualisierung von Homestead.rb
  5. PATH-bezogene Probleme

Kritisch (für mich) schien es die Virtualbox-Version im ersten Setup zu sein: 

vagrant box add laravel/Homestead

Geben Sie stattdessen die Versionsnummer wie folgt an: 

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


Sonstiges :

Ich habe es mit den folgenden laravel/Homestead virtualbox-Versionen versucht und ist mit diesen fehlgeschlagen: 

  • 1.0.1 (Standardeinstellung)

und laravel/Homestead-7:

  • 0.2.1
3
jdkschang

Dies liegt auch an einem Syntaxfehler in einer Datei im conf/-Verzeichnis oder .env-Datei ..__ In meinem Fall habe ich diesen Fehler erhalten, weil ich vergessen habe, ::class unter zu setzen Das Ende der Zeile beim Hinzufügen eines Dienstanbieters und einer Fassade zu den Arrayanbietern und in der Datei conf/app.php. Ich habe das korrigiert und der Fehler ist verschwunden.

2
MrMojoRisin

Ich gab ein CMD in die CLI ein und tippte es versehentlich in die Konfigurationsdatei der App. Ich musste diesem Verfahren folgen, um das Problem zu finden. 

Lösung, wie man das Problem findet:

  • erstellen Sie eine Sicherungskopie des Konfigurationsordners. Versuchen Sie, eine Konfiguration bei a zu löschen
  • zeit und versuchen Sie, den fehlgeschlagenen Composer/Artisan-Befehl auszuführen. Wenn du
  • datei suchen, die fehlgeschlagen ist - Suche nach einer Zeile, die möglicherweise fehlschlagen kann.
  • Grund dafür ist: Sie verwenden eine Klassenkonstante, die nicht geladen ist
  • noch. Sie verwenden eine Klasse/Funktion, die noch nicht geladen ist. usw

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

2
Uncaught ReflectionException: Class log does not exist

Dieser Fehler kommt in Version 5.2 &> Versionen:

Meine Fehler sind:

Tips1: Wenn Sie (;) Ende Ihres Codes in der Konfigurationsdatei vermissen

Andere Syntaxfehler Dieser Fehler tritt auf.

Mein Fehlercode:

<?php
return [
'data' => [
    'common' => [
        'AuthKey1' =>  "17086...........9a87a1",
        'AuthKey2' =>  "17086...........9a87a1",
        'AuthKey3'   =>  "17043...........59969531",
    ],
]
]

Korrekter Code: Fehlendes (;) Ende des Rückgabe-Arrays  

<?php
return [
'data' => [
    'common' => [
        'AuthKey1' =>  "17086...........9a87a1",
        'AuthKey2' =>  "17086...........9a87a1",
        'AuthKey3'   =>  "17043...........59969531",
    ],
]
];
1
venkatSkpi

Dieses Problem wird in der Regel durch Leerzeichen zwischen Wörtern in der .env-Datei verursacht

SITE_DESCRIPTION = Social Network for dogs

sie ersetzen es durch

SITE_DESCRIPTION = 'Social Network for dogs'
1

In meinem Fall fehlt ein Komma in meiner Konfigurationsdatei (config/app.php), nachdem ich meinen Zweig zum Master zusammengeführt habe.

my code snippet

es war ein Syntaxfehler, der jedoch nicht angezeigt wurde.

0
严水发

Ich hatte das gleiche Problem und keine der hier gelösten Lösungen

Ich habe festgestellt, dass es eine Ausnahme gibt, dass der Ordner config nicht zugelassen ist

Nachdem die Erlaubnis fixiert war, hat alles funktioniert!


Wie finde ich es heraus?

Setzen Sie einen Haltepunkt in vendor/laravel/framework/src/illluminate/Foundation/Http/Kernel.php

linie 101 in der Klinke der Grifffunktion.

So habe ich herausgefunden, dass die Genehmigung abgelehnt wurde.

0
Elad

Dieser Fehler kann durch einen Fehler in einer der Konfigurationsdateien verursacht werden .. __ Ändern Sie die Funktion loadConfigurationFiles in /vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php in, um herauszufinden, welche Datei es verursacht :

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);
    }
}

Führen Sie den PHP-Handwerker aus und der letzte "Schlüssel" zum Laden ist die Konfigurationsdatei, die den Fehler verursacht hat . Korrigieren Sie ihn und vergessen Sie nicht, den Befehl var_dump zu entfernen ... Viel Glück.

0
Maxence Cupper

Lauf php artisan config:cache hat es für mich gelöst.

Wenn Sie ein Shared Hosting ohne Zugriff auf das Terminal/CMD verwenden, fügen Sie dies zu Ihrem Routs.php Datei:

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

Dann geh zu yourdomain.com/config-cache, um dieses Skript auszuführen.

0
Ido

Ja, wie von @jakehallas gesagt. Es hängt nicht davon ab, was in Ausnahmefällen angezeigt wird.

Wenn ein Datenbankproblem oder ein anderes Konfigurationsproblem vorliegt, führt dies tatsächlich zu einem Fehler.

Als ich versuchte, etwas in database.php zu ändern, habe ich dieselbe Datei wie database-copy.php dupliziert. Ich habe dieses Problem nicht ausgeführt.

Nachdem ich durchgegangen bin, was ich vorher gemacht habe, entfernte ich gerade diese Datenbank-copy.php-Datei.

Vielen Dank ...

0
user2215155

Dieses Problem wurde behoben, nachdem in der .env-Datei e ( -Ansicht .env Leerzeichen entfernt wurden, da im vi-Editor am Ende der .env-Datei kein Leerzeichen angezeigt wird. ) und führen Sie die folgenden Befehle aus.

Befehle:

php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan clear-compiled
0
Muhammad Usama

Diese Art von Fehler, wenn Sie die Abhängigkeiten Ihres Projekts verpasst haben. Runphp composer.phar update

0
Nimmi Verma

Ich hatte einen negativen Wert wie

BUSINESS_RECONCILIATION_DAYS=-8

Ich musste einwickeln

BUSINESS_RECONCILIATION_DAYS="-8"

Ich habe viele Lösungen hier und anderswo ausprobiert. Es hat bei mir nicht funktioniert. Ich habe es gelöst, indem ich /var/www/html/bootstrap/cache/compiled.php manuell entfernt und die Autoload-Dateien aktualisiert habe:

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

In meinem Fall hatte ich die route()-Methode in einer Konfigurationsdatei verwendet. Offensichtlich funktioniert diese Methode nicht, da diese Dateien den Illuminate Helper nicht verwenden. Sie sind einfache .php mit Daten.

Die Konfigurationsdateien werden vor der Instantiierung der Log-Klasse gelesen, was den Fehler verursacht, den Jakehallas sehr gut erklärt.

0
adriaroca

Da noch niemand über Orchester/Testbench gesprochen hat, dachte ich, ich würde nur die Lösung zu meinem Problem hinzufügen.

Ich habe ein Laravel Paket geschrieben, als ich diesen Fehler in einem meiner Komponententests erhalten habe. Ich habe orchestra/testbench Verwendet, um das Testen von Laravel-spezifischen Teilen des Codes zu ermöglichen.

Das Problem bestand einfach darin, dass die Testklasse PHPUnit\Framework\TestCase Anstelle von Orchestra\Testbench\TestCase Erweiterte.

0
Lars Nyström