web-dev-qa-db-fra.com

Uncaught ReflectionException: le journal de classe n’existe pas Laravel 5.2

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 à: 

  • Supprimer des espaces dans le fichier .env
  • Suppression du répertoire du fournisseur et réinstallation
  • Suppression de certains packages requis dans composer.json 

J'ai: 

  • Remplacé mon .env par le example.env pour éviter toute erreur de configuration personnalisée. 
  • J'ai enlevé et re-cloné le repo. 
  • J'ai utilisé le 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. 

37
jakehallas

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! 

49
jakehallas

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é

30
Richard Torcato

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 .

18
Ben Johnson

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

8
Epsilon47

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"

4
Ben

Dans mon cas, l'absence de l'extension PDO était le problème. Après l'avoir installé, le problème a été corrigé.

3
GarryOne

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:

  1. réécriture, suppression de .env pour d'éventuels problèmes d'analyse
  2. php7.1 et les problèmes mcrypt/mbstring
  3. installer les paquets suggérés par le compositeur
  4. mettre à jour Homestead.rb
  5. Problèmes liés à PATH

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
3
jdkschang

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.

2
MrMojoRisin

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:

  • faire une copie de sauvegarde du dossier config. essayez de supprimer une configuration à un
  • temps et essayez d'exécuter la commande composer/artisan qui a échoué. Lorsque vous
  • trouver le fichier qui a échoué - rechercher une ligne qui peut éventuellement échouer.
  • La raison de son échec est la suivante: vous utilisez une constante de classe qui n'est pas chargée
  • encore. Vous utilisez une classe/fonction qui n'est pas encore chargée. etc

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

2
Eduardo Chongkan
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",
    ],
]
];
1
venkatSkpi

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'
1
Cengkuru Michael

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.

0
Elad

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.

0
Maxence Cupper

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

0
user2215155

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
0
Muhammad Usama

Ce type d'erreur survient lorsque vous avez omis l'une des dépendances de votre projet. Runphp composer.phar update

0
Nimmi Verma

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
0
Jievie

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.

0
adriaroca