J'essaie actuellement de cloner un projet existant de github. Après le clonage, j'exécute composer install
au cours du processus. Le message d'erreur suivant s'affiche:
Uncaught ReflectionException: Class log does not exist
Je cours Laravel 5.2 sur Centos 7.
J'ai vu des références à:
.env
. J'ai:
.env
par le example.env
pour éviter toute erreur de configuration personnalisée. composer.json
fourni par défaut avec Laravel pour voir si cela fait une différence. Aucune de ces réponses ne m'a apporté de joie. J'ai également le même environnement configuré sur une autre machine avec l'application fonctionnant correctement. La seule différence est que la machine (de travail) n'a pas été clonée à partir de git - c'était l'environnement de construction initial.
La trace de la pile que je reçois:
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
Toute aide serait très appréciée. Merci d'avance.
Bon, après plusieurs heures de recherches, la solution de mon problème a été trouvée. La raison pour laquelle je dis que mon problème est parce que la Exception
est très erronée.
Uncaught ReflectionException: Class log does not exist
Cette exception signifie simplement que Laravel a essayé de consigner une erreur mais n'a pas pu instancier la classe Log
de Laravel. Cela n’est pas dû au fait que la classe Log se promène ou se cache. En effet, Laravel poursuit son processus de démarrage et n'a pas encore chargé la classe Log
.
Donc, cette exception est levée car une erreur s’est produite pendant le cycle de démarrage de Laravel - lorsque cette erreur s’est produite, elle a tenté de lever une exception - mais elle ne peut pas lever d’exception car la classe Log
est encore chargée. D'où la raison pour laquelle nous obtenons un ReflectionException
Ceci s’est produit dans toutes les versions de Laravel la seule raison pour laquelle nous avons vu l’exception lancée dans laravel 5.1 <= c’est parce que précédemment Laravel éliminait le problème en silence et se poursuivait tout au long de son processus d’amorçage. vous ne recevrez pas le Log class exception
.
Dans mon cas particulier, l'extension php-mysql
n'était pas installée, ce qui a provoqué la casse de Laravel pendant son processus de démarrage.
En fin de compte, il est extrêmement difficile de déboguer ce que vous avez peut-être mal fait en raison de l'erreur très erronée.
J'espère que ça aidera quelqu'un!
Dans votre fichier .env, assurez-vous de ne pas laisser d'espaces pour les valeurs
par exemple cela est permis
DB_USERNAME=Homestead
ce n'est pas permis
DB_USERNAME=home stead
vous pouvez envelopper la valeur entre guillemets si vous avez des espaces.
DB_USERNAME="home stead"
souhaite vraiment qu'ils ont utilisé JSON pour le fichier .env, peut-être devrions-nous demander cette fonctionnalité
L'erreur sous-jacente est révélée en modifiant vendor/laravel/framework/src/Illuminate/Container/Container.php
et en plaçant le texte suivant en haut:
<?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.
//...
}
(Merci à https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist/replies/160902 pour cette idée.)
Pour ajouter à la liste des causes premières de ce message, définir une fermeture dans un fichier de configuration et appeler php artisan config:cache
ultérieurement provoquera cette opération (du moins dans Laravel 5.1). Solution pour cette manifestation: ne définissez pas de fermetures dans les fichiers de configuration Laravel, par https://github.com/laravel/framework/issues/9625 .
Supprimer le fichier bootstrap/cache/config.php
. Ce fichier ne peut pas être affiché sur Windows, si oui, utilisez double commander par exemple. Cela fonctionnera certainement!
MODIFIER:
Cela peut être dû à la mise en cache du fichier .env. Si c'est votre cas, essayez de supprimer bootstrap/cache/config.php
Je remarquais le même comportement après avoir ajouté quelques lignes à mes fichiers .env. Les espaces ne sont pas autorisés sans guillemets, et ceci peut donc être corrigé comme suit:
APP_YOUR_NAME="A value with some spaces"
Dans mon cas, l'absence de l'extension PDO était le problème. Après l'avoir installé, le problème a été corrigé.
MODIFIER::
Parce que je n'étais pas satisfait des chemins de débogage et de retouche plutôt maladroits, etc. pour que le fonctionnement de VM se déroule sans accroc, j'ai réfléchi au processus et réinstallé la boîte vagrant laravel/Homestead (virtualbox 1.0.1
)
Pour moi le problème provenait potentiellement d'une virgule manquante dans config/app.php
. La virgule manquante a probablement interrompu le processus de compilation et a généré l'erreur Uncaught ReflectionException: Class log does not exist
.
Ce n'est pas une réponse directe, mais sert davantage de guide à ceux qui s'aventurent dans cet abîme d'erreurs silencieuses
Système: macOS Sierra
Vagabond: 1.9.1
(dernière version au moment de la rédaction)
VM: laravel/Homestead (virtualbox 0.4.0
)
Version Laravel: 5.1.*
PHP: 7.0.*
Après des tentatives répétées pour résoudre le problème, notamment:
Critiquement, (pour moi), il semblait que c'était la version de la virtualbox dans la configuration initiale:
vagrant box add laravel/Homestead
Essayez plutôt de fournir le numéro de version comme suit:
vagrant box add laravel/Homestead
--box-version 0.4.0
misc :
J'ai tenté et échoué avec les versions laravel/Homestead
virtualbox suivantes:
1.0.1
(par défaut)et laravel/Homestead-7
:
0.2.1
Cela est également dû à une erreur de syntaxe dans un fichier du fichier conf/directory ou .env . Dans mon cas, cette erreur est due à l’oubli de ::class
dans la fin de la ligne lors de l'ajout d'un fournisseur de services et d'une façade, aux fournisseurs de tableaux et d'alises dans le fichier conf/app.php. J'ai corrigé cela et l'erreur a disparu.
J'étais en train de taper un CMD dans la CLI et de le taper accidentellement dans le fichier de configuration de l'application. Je devais suivre cette procédure afin de trouver le problème.
Solution, comment trouver le problème:
https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist?page=2
Uncaught ReflectionException: Class log does not exist
Cette erreur vient laravel 5.2 &> versions:
Mes erreurs sont:
Tips1: Lorsque vous manquez (;) fin de votre code dans le fichier de configuration
Autre syntaxe Erreur Cette erreur survient.
Mon code d'erreur:
<?php
return [
'data' => [
'common' => [
'AuthKey1' => "17086...........9a87a1",
'AuthKey2' => "17086...........9a87a1",
'AuthKey3' => "17043...........59969531",
],
]
]
Code correct: Manquant (;) Fin de retour Tableau
<?php
return [
'data' => [
'common' => [
'AuthKey1' => "17086...........9a87a1",
'AuthKey2' => "17086...........9a87a1",
'AuthKey3' => "17043...........59969531",
],
]
];
Ce problème est généralement causé par des espaces entre les mots du fichier .env . Assurez-vous que si
SITE_DESCRIPTION = Social Network for dogs
vous le remplacez par
SITE_DESCRIPTION = 'Social Network for dogs'
J'ai eu le même problème et aucune des solutions ici n'a fonctionné
J'ai constaté qu'il existe une exception d'autorisation refusée au dossier config
Après avoir fixé la permission, tout a fonctionné!
Comment le comprendre?
Mettez un point d'arrêt dans vendor/laravel/framework/src/illluminate/Foundation/Http/Kernel.php
ligne 101 à l’intérieur du verrou de la fonction de poignée.
Voici comment j'ai découvert la permission refusée.
Cette erreur peut être due à une erreur dans l'un des fichiers de configuration . Pour localiser le fichier qui la cause, modifiez la fonction loadConfigurationFiles dans /vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php to :
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);
}
}
Exécutez php artisan et le dernier chargement "key" est le fichier de configuration à l'origine de l'erreur . Corrigez-le et n'oubliez pas de supprimer votre commande var_dump ... Bonne chance.
Oui, comme l'a dit @jakehallas. Ce n'est pas lié à ce qui est montré à l'exception.
En fait, s’il existe un problème de base de données ou un autre problème de configuration de variables pouvant entraîner ce problème.
En fait, quand j'ai essayé de changer quelque chose dans database.php, je viens de dupliquer le même fichier que database-copy.php. Je n'ai pas omis ce problème cause.
Après avoir traversé ce que j’ai fait avant de supprimer ce fichier database-copy.php, cela fonctionne très bien ..
Merci ...
Résolution de ce problème après la suppression de l'espace dans le fichier .env e (view .env en sublime, car l'éditeur vi ne montre pas d'espace à la fin du fichier .env.) Et s'exécute sous les commandes.
Commandes:
php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan clear-compiled
Ce type d'erreur survient lorsque vous avez omis l'une des dépendances de votre projet. Runphp composer.phar update
J'ai essayé beaucoup de solutions fournies ici et ailleurs. Cela n'a pas fonctionné pour moi. Je l'ai résolu en supprimant manuellement /var/www/html/bootstrap/cache/compiled.php et en mettant à jour les fichiers à chargement automatique:
rm /var/www/html/bootstrap/cache/compiled.php
composer dump-autoload
Dans mon cas, j'avais utilisé la méthode route()
dans un fichier de configuration. De toute évidence, cette méthode ne fonctionne pas car ces fichiers n'utilisent pas Illuminate Helper, ils sont simples .php avec des données.
Les fichiers de configuration sont lus avant d'instancier la classe Log, ce qui provoque l'erreur que Jakehallas explique très bien.