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:
.env
-Datei entfernen. Ich habe:
.env
wurde durch den example.env
ersetzt, um benutzerdefinierte Konfigurationsfehler zu vermeiden. 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.
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!
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
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 ).
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
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"
In meinem Fall war die fehlende PDO-Erweiterung das Problem. Nach der Installation wurde das Problem behoben.
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:
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
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.
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:
https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist?page=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",
],
]
];
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'
In meinem Fall fehlt ein Komma in meiner Konfigurationsdatei (config/app.php), nachdem ich meinen Zweig zum Master zusammengeführt habe.
es war ein Syntaxfehler, der jedoch nicht angezeigt wurde.
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.
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.
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.
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 ...
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
Diese Art von Fehler, wenn Sie die Abhängigkeiten Ihres Projekts verpasst haben. Runphp composer.phar update
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
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.
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.