php - ReflectionException no capturado: el registro de clase no existe Laravel 5.2
centos7 laravel-5.2 (22)
Además, esto se debe a un
error de sintaxis
en algún archivo en el
directorio conf /
o en el
archivo .env
.
En mi caso, recibí este error porque olvido poner
::class
al final de la línea al agregar un proveedor de servicios y fachada, a los proveedores de matrices y alises en el archivo conf / app.php.
Corregí esto y el error desapareció.
Actualmente estoy tratando de clonar un proyecto mío existente de github.
Después de clonar ejecuto la
composer install
durante el proceso, recibo el siguiente error:
Uncaught ReflectionException: Class log does not exist
Estoy ejecutando Laravel 5.2 en Centos 7.
He visto referencias a:
-
Eliminar espacios dentro del archivo
.env
. - Eliminar el directorio de proveedores y reinstalar
- Eliminar ciertos paquetes requeridos en composer.json
Yo tengo:
-
.env
mi.env
con elexample.env
para evitar errores de configuración personalizados. - He eliminado y re-clonado el repositorio.
-
He usado el
composer.json
predeterminado enviado con Laravel para ver si eso hace la diferencia.
Nada de lo anterior me ha traído ninguna alegría. También tengo el mismo entorno configurado en otra máquina con la aplicación funcionando bien. La única diferencia aquí es que la máquina (en funcionamiento) no se clonó desde git: era el entorno de construcción inicial.
El seguimiento de la pila que estoy recibiendo:
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
Cualquier ayuda sería muy apreciada. Gracias por adelantado.
Como nadie ha mencionado la orquesta / banco de pruebas todavía, pensé que simplemente agregaría la solución a mi problema.
Estaba escribiendo un paquete de Laravel cuando recibí este error en una de mis pruebas unitarias.
Estaba usando
orchestra/testbench
para habilitar la prueba de partes específicas del código de Laravel.
El problema era simplemente que la clase de prueba estaba extendiendo
PHPUnit/Framework/TestCase
lugar de
Orchestra/Testbench/TestCase
.
De acuerdo, después de muchas horas de excavación, se ha encontrado la solución para
mi problema
.
La razón por la que digo mi problema es porque la
Exception
es muy errónea.
Uncaught ReflectionException: Class log does not exist
Esta excepción simplemente significa que Laravel intentó registrar un error pero no pudo crear una instancia de la clase
Log
de Laravel.
Esto no se debe a que la clase Log se pasee o se esconda.
Esto se debe a que Laravel todavía está pasando por su proceso de arranque y aún no ha cargado la clase
Log
.
Por lo tanto, esta excepción se produce porque se produjo un error durante el ciclo de arranque de Laravel; cuando se produjo este error, intentó lanzar una excepción, pero no puede lanzar una excepción porque la clase
Log
todavía está cargada.
De ahí la razón por la que obtenemos una
ReflectionException
Esto
ha ocurrido en todas las versiones de Laravel,
la única razón por la que hemos visto la excepción lanzada en laravel 5.1 <= es porque previamente Laravel descartó el problema en silencio y continuó con su proceso de arranque; básicamente, su aplicación aún se rompería, sin embargo, no recibiría la
Log class exception
.
En mi caso particular, no tenía instalada la extensión
php-mysql
causó que Laravel se rompiera durante el proceso de arranque.
En última instancia, es increíblemente difícil depurar lo que pudo haber hecho mal debido a que el error fue muy erróneo.
¡Espero que esto ayude a alguien!
Ejecute
php artisan config:cache
resolvió por mí.
O si está en un alojamiento compartido sin acceso al Terminal / CMD, agregue esto a su archivo
Routs.php
:
Route::get(''/config-cache'', function() {
Artisan::call(''config:cache'');
return ''<h1>Config cache cleared successfully</h1>'';
});
Luego vaya a
yourdomain.com/config-cache
para ejecutar este script.
El error subyacente se revela modificando
vendor/laravel/framework/src/Illuminate/Container/Container.php
y colocando lo siguiente en la parte superior:
<?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.
//...
}
(Crédito a https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist/replies/160902 por esta idea).
Para agregar a la lista de causas raíz de este mensaje, definir un cierre en un archivo de configuración
y
llamar a
php artisan config:cache
posteriormente causará esto (al menos en Laravel 5.1).
Solución para esta manifestación: no defina los cierres en los archivos de configuración de Laravel, según
https://github.com/laravel/framework/issues/9625
.
Eliminar el archivo
bootstrap/cache/config.php
.
Es posible que este archivo no se muestre en Windows; de ser así, utilice el doble comandante, por ejemplo.
Definitivamente funcionará!
EDITAR:
Puede ser causado por el almacenamiento en caché del archivo .env, si es su caso, intente eliminar
bootstrap/cache/config.php
En mi caso, falta una coma en mi archivo de configuración (config / app.php) después de fusionar mi rama con master.
fue un error de sintaxis, pero no lo mostró.
En mi caso, había usado el método
route()
en un archivo de configuración.
Obviamente, este método no funciona porque estos archivos no usan Illuminate Helper, son simples .php con datos.
Los archivos de configuración se leen antes de crear instancias de la clase Log, lo que provoca el error que Jakehallas explica muy bien.
En mi caso, la falta de extensión PDO fue el problema. Después de instalarlo, se solucionó el problema.
En su archivo .env asegúrese de no tener espacios para valores
por ejemplo esto está permitido
DB_USERNAME=homestead
Esto no esta permitido
DB_USERNAME=home stead
puede ajustar el valor entre comillas si tiene espacios.
DB_USERNAME="home stead"
realmente desearía que usaran json para el archivo .env, tal vez deberíamos solicitar esa característica
Estaba escribiendo un CMD en la CLI y accidentalmente lo escribí en el archivo de configuración de la aplicación. Tuve que seguir este procedimiento para encontrar el problema.
Solución, cómo encontrar el problema:
- Haga una copia de seguridad de la carpeta de configuración. intenta eliminar una configuración en un
- tiempo e intente ejecutar el comando compositor / artesano que falló. Cuando tú
- buscar archivo que falló: busque una fila que posiblemente pueda fallar.
- La razón por la que falla es: utiliza una constante de clase que no está cargada
- todavía. Utiliza la clase / función que aún no está cargada. etc.
https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist?page=2
Este error puede ser causado por un error en uno de los archivos de configuración. Para localizar qué archivo lo está causando, cambie la función loadConfigurationFiles en /vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php a:
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);
}
}
Ejecute php artisan y la última "clave" de carga es el archivo de configuración que causa el error. Corrígelo y no olvides eliminar el comando your var_dump ... Buena suerte.
Este problema generalmente es causado por espacios entre palabras en el archivo .env. Asegúrate de tener algo como
SITE_DESCRIPTION = Social Network for dogs
lo reemplazas con
SITE_DESCRIPTION = ''Social Network for dogs''
Este tipo de error cuando se perdió alguna de las dependencias de su proyecto.
Ejecute
php composer.phar update
Noté el mismo comportamiento después de agregar algunas líneas a mis archivos .env. Los espacios no están permitidos sin comillas, por lo que esto se puede arreglar como:
APP_YOUR_NAME="A value with some spaces"
Probé muchas soluciones proporcionadas aquí y en otros lugares. A mi no me sirvió. Lo resolví eliminando manualmente /var/www/html/bootstrap/cache/compiled.php y actualizando los archivos de carga automática:
rm /var/www/html/bootstrap/cache/compiled.php
composer dump-autoload
Resolvió este problema después de eliminar el espacio en el archivo .env ( ver .env en sublime porque el editor vi no muestra espacio al final del archivo .env ) y ejecutar los siguientes comandos.
Comandos:
php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan clear-compiled
Sí, como dijo @jakehallas. No está relacionado con lo que se muestra en excepción.
En realidad, si hay algún problema de dababase u otro problema de variables de configuración, esto lo causa.
En realidad, cuando intenté cambiar algo en database.php, simplemente dupliqué el mismo archivo que database-copy.php. No ejecuté esto causa un problema.
Después de pasar por lo que hice antes de eliminar este archivo database-copy.php, funciona bien.
Gracias ...
Tuve el mismo problema y ninguna de las soluciones aquí funcionó
Descubrí que hay una excepción de permiso denegado a la carpeta de
config
Después de arreglar el permiso, ¡todo funcionó!
¿Cómo imaginarlo?
Ponga un punto de quiebre en
vendor/laravel/framework/src/illluminate/Foundation/Http/Kernel.php
línea 101 dentro del retén de la función de manejo.
Así es como me enteré del permiso denegado.
Tuve un valor negativo como
BUSINESS_RECONCILIATION_DAYS=-8
Necesitaba envolver
BUSINESS_RECONCILIATION_DAYS="-8"
EDITAR::
Debido a que no estaba satisfecho con las rutas de depuración y reelaboración bastante torpes, etc. para que la VM funcionara sin problemas, reflexioné sobre el proceso y reinstalé la vavel box laravel / homestead (
virtualbox 1.0.1
)
Para mí,
el problema potencialmente surgió de una coma que faltaba en
config/app.php
.
La coma que falta probablemente detuvo el proceso de compilación y escupió la
Uncaught ReflectionException: Class log does not exist
.
Esta no es una respuesta directa, pero sirve más como una publicación guía para aquellos que se aventuran en este abismo de errores silenciosos.
Sistema: macOS Sierra
Vagabundo:
1.9.1
(última versión al momento de escribir)
VM: laravel / homestead (
virtualbox 0.4.0
)
Versión Laravel:
5.1.*
PHP:
7.0.*
Después de repetidos intentos de resolver el problema, que incluyen:
- reescritura, eliminando .env por posibles problemas de análisis
- php7.1 y los problemas de mcrypt / mbstring
- instalación de paquetes sugeridos por el compositor
- actualizar homestead.rb
- Problemas relacionados con la RUTA
Críticamente, (para mí) parecía que era la versión de virtualbox en la configuración inicial:
vagrant box add laravel/homestead
En su lugar, intente proporcionar el número de versión de esta manera:
vagrant box add laravel/homestead
--box-version 0.4.0
misceláneo :
He intentado y he fallado con las siguientes
laravel/homestead
virtualbox:
-
1.0.1
(predeterminado)
y
laravel/homestead-7
:
-
0.2.1
Uncaught ReflectionException: Class log does not exist
Este error viene laravel 5.2 y> versiones:
Mis errores son:
Tips1: cuando falta (;) final de su código en el archivo de configuración
Otro error de sintaxis Este error viene.
Mi código de error:
<?php
return [
''data'' => [
''common'' => [
''AuthKey1'' => "17086...........9a87a1",
''AuthKey2'' => "17086...........9a87a1",
''AuthKey3'' => "17043...........59969531",
],
]
]
Código correcto: Falta (;) Fin de la matriz de retorno
<?php
return [
''data'' => [
''common'' => [
''AuthKey1'' => "17086...........9a87a1",
''AuthKey2'' => "17086...........9a87a1",
''AuthKey3'' => "17043...........59969531",
],
]
];