I am currently trying to clone an existing project of mine from github. After clone I run composer install
during the process I receive the following error:
Uncaught ReflectionException: Class log does not exist
I am running Laravel 5.2 on Centos 7.
I have seen references to:
.env
file. I have:
.env
with the example.env
to avoid any custom config errors. composer.json
shipped with Laravel to see if that makes a difference. None of the above have brought me any joy. I also have the same environment set up on another machine with the application working fine. The only difference here is the machine (working) wasn't cloned from git - it was the initial build environment.
The stack trace I am receiving:
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
Any help would be much appreciated. Thanks in advance.
答案 0 :(得分:51)
好的,经过多个小时的挖掘,找到了我的问题的解决方案。我之所以说我的问题是因为Exception
非常错误。
Uncaught ReflectionException: Class log does not exist
此异常仅表示Laravel尝试记录错误但无法实例化Laravel的Log
类。这不是由于Log类进行了漫游或隐藏。这是因为Laravel仍在进行启动过程。尚未加载Log
类。
因此,抛出此异常是因为在Laravel的引导周期期间发生了错误 - 当发生此错误时它尝试抛出异常 - 但它不能抛出异常,因为Log
类是然而被装载。因此我们得到ReflectionException
这个已经出现在Laravel的所有版本中,这是我们看到laravel 5.1< =抛出异常的唯一原因,因为之前Laravel默默地放弃了这个问题&通过它的启动过程继续 - 基本上,你的应用程序仍然会破坏,但你不会收到Log class exception
。
在我的特定情况下,我没有安装php-mysql
扩展程序,导致Laravel在启动过程中中断。
最终,由于错误引导错误,调试你可能做错了什么是非常困难的。
我希望这有助于某人!
答案 1 :(得分:33)
在.env文件中,确保没有值空格
例如允许
DB_USERNAME=homestead
这是不允许的
DB_USERNAME=home stead
如果有空格,可以将值包装在引号中。
DB_USERNAME="home stead"
非常希望他们使用json作为.env文件,也许我们应该请求该功能
答案 2 :(得分:19)
通过修改vendor/laravel/framework/src/Illuminate/Container/Container.php
并将以下内容置于顶部来揭示潜在错误:
<?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.
//...
}
(感谢https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist/replies/160902这个想法。)
要添加到此消息的根本原因列表,在配置文件和中调用php artisan config:cache
定义一个闭包将导致此问题(至少在Laravel 5.1中)。此表现形式的解决方案:根据https://github.com/laravel/framework/issues/9625,不要在Laravel配置文件中定义闭包。
答案 3 :(得分:10)
删除档案bootstrap/cache/config.php
。此文件可能不会显示在Windows上,如果是这样,请使用双指令器。 Definitelly会工作!
编辑:
这可能是由缓存.env文件引起的,如果是你的情况,请尝试删除
bootstrap/cache/config.php
答案 4 :(得分:4)
在我的.env文件中添加几行后,我注意到了同样的行为。不带引号的空格,因此可以修改如下:
APP_YOUR_NAME="A value with some spaces"
答案 5 :(得分:3)
在我的情况下,缺少PDO扩展是问题所在。安装后,问题得到解决。
答案 6 :(得分:3)
修改:: 强>
因为我对相当笨拙的调试和改造路径等不满意以使VM顺利运行,所以我反思过程并重新安装了流浪盒laravel / homestead(virtualbox 1.0.1
)
对我来说问题可能源于config/app.php
中缺少逗号。缺少的逗号可能会停止编译过程并吐出Uncaught ReflectionException: Class log does not exist
错误。
这不是一个直接的答案,但更多的是作为指导那些冒险进入沉默错误深渊的人
系统:macOS Sierra
Vagrant:1.9.1
(撰写本文时的最新版本)
VM:laravel / homestead(virtualbox 0.4.0
)
Laravel版本:5.1.*
PHP:7.0.*
在反复尝试解决问题后,包括:
重要的是,(对我来说)似乎是初始设置中的虚拟版本:
vagrant box add laravel/homestead
而是尝试提供版本号,如下所示:
vagrant box add laravel/homestead
--box-version 0.4.0
<强>其它强>:
我尝试过以下laravel/homestead
个虚拟机版本并尝试失败:
1.0.1
(默认)和laravel/homestead-7
:
0.2.1
答案 7 :(得分:2)
我在CLI中输入了CMD,并在app配置文件中意外输入了它。我必须遵循这个程序才能找到问题。
解决方案,如何找到问题:
https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist?page=2
答案 8 :(得分:2)
此外,这是由于 conf /目录或 .env文件中某些文件中出现语法错误。
在我的情况下,我得到了这个错误,因为我忘了在添加服务提供者和外观时将::class
放在行的末尾,添加到数组提供者和conf / app.php文件中的alises。我纠正了这个错误消失了。
答案 9 :(得分:1)
此错误可能是由其中一个配置文件中的错误引起的。 要找到导致它的文件,请将/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php中的函数loadConfigurationFiles更改为:
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);
}
}
运行php artisan和最后一次加载&#34;键&#34;是导致错误的配置文件。 纠正它并且不要忘记删除你的var_dump命令...... 祝你好运。
答案 10 :(得分:1)
在更新作曲家时,我认为laravel会进行一些验证。
安装解压文件对我有效。祝你好运:)
答案 11 :(得分:1)
Uncaught ReflectionException: Class log does not exist
此错误来自laravel 5.2&amp; &GT;版本:
我的错误是:
<强> TIPS1:强> 当您在配置文件
中缺少(;)代码结束时其他语法错误此错误来了。
我的错误代码:
<?php
return [
'data' => [
'common' => [
'AuthKey1' => "17086...........9a87a1",
'AuthKey2' => "17086...........9a87a1",
'AuthKey3' => "17043...........59969531",
],
]
]
正确代码:缺少(;)返回结束数组
<?php
return [
'data' => [
'common' => [
'AuthKey1' => "17086...........9a87a1",
'AuthKey2' => "17086...........9a87a1",
'AuthKey3' => "17043...........59969531",
],
]
];
答案 12 :(得分:1)
此问题通常是由.env文件中的单词之间的空格引起的。 确保你有类似
的东西SITE_DESCRIPTION = Social Network for dogs
用
替换它SITE_DESCRIPTION = 'Social Network for dogs'
答案 13 :(得分:0)
是的,正如@jakehallas所说。它与异常中显示的内容无关。
实际上,如果有任何dababase问题或其他配置变量问题导致此问题。
实际上,当我试图在database.php中更改某些内容时,我只是复制了与database-copy.php相同的文件。我没有解决这个问题。
在我刚刚删除了这个数据库-copy.php文件之后,我已经完成了所做的事情,它的工作正常...
谢谢...
答案 14 :(得分:0)
就我而言,我在配置文件中使用了route()
方法。显然,这种方法不起作用,因为这些文件不使用Illuminate Helper,它们很简单.php包含数据。
在实例化Log类之前会读取配置文件,这会导致Jakehallas解释错误。
答案 15 :(得分:0)
在删除 .env文件 e中的空间后解决了此问题(在sublime中查看.env,因为vi编辑器未在.env文件的末尾显示空格。)并运行以下命令。
命令:
php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan clear-compiled
答案 16 :(得分:0)
我尝试了这里和其他地方提供的许多解决方案。它对我不起作用。我通过手动删除/var/www/html/bootstrap/cache/compiled.php并更新自动加载文件来解决此问题:
rm /var/www/html/bootstrap/cache/compiled.php
composer dump-autoload
答案 17 :(得分:0)
我遇到了同样的问题,这里没有一个解决方案
我发现config
文件夹的权限被拒绝了
修复权限后一切正常!
如何计算?
在其中插入一个断点
vendor/laravel/framework/src/illluminate/Foundation/Http/Kernel.php
handle函数的catch中的第101行。
这就是我发现有关拒绝权限的方式。
答案 18 :(得分:0)
当您错过项目的任何依赖项时,会出现此类错误。
运行php composer.phar update
答案 19 :(得分:0)
运行php artisan config:cache
为我解决了此问题。
或者,如果您在共享托管中而无法访问终端/ CMD,请将其添加到您的Routs.php
文件中:
Route::get('/config-cache', function() {
Artisan::call('config:cache');
return '<h1>Config cache cleared successfully</h1>';
});
然后转到yourdomain.com/config-cache
运行此脚本。
答案 20 :(得分:0)
因为没有人提到管弦乐队/测试台,但我想我只是将解决方案添加到我的问题中。
在其中一个单元测试中遇到此错误时,我正在编写Laravel软件包。我使用orchestra/testbench
来测试代码的Laravel特定部分。
问题很简单,就是测试类正在扩展PHPUnit\Framework\TestCase
而不是Orchestra\Testbench\TestCase
。
答案 21 :(得分:0)
我有一些负值,例如
BUSINESS_RECONCILIATION_DAYS=-8
我需要包装
BUSINESS_RECONCILIATION_DAYS="-8"
答案 22 :(得分:0)
在我的情况下,将分支合并到master后,配置文件(config / app.php)中缺少逗号。
这是语法错误,但未显示。
答案 23 :(得分:0)
如先前的答案所述,我们在laravel中的一个配置文件出现了问题。我们使用了全局$ app变量,该变量在laravel 5.2+中不再可用。
我们发现这的方法是在src / Illuminate / Foundation / Bootstrap / LoadConfiguration.php的loadConfigurationFiles方法中检查哪个文件加载失败。
答案 24 :(得分:0)
即使这是一个旧线程,希望我的回答有一天能帮助某人(像我一样)。 就我而言,我发现我应该像这样从终端运行工匠:
sudo php artisan command
那是崩溃,因为它没有写入日志文件的权限。
答案 25 :(得分:-1)
只需运行
composer update
解决了该问题。