我目前正在尝试从github克隆我的现有项目。克隆后我在进程中运行composer install
我收到以下错误:
Uncaught ReflectionException: Class log does not exist
我在Centos 7上运行Laravel 5.2。
我看过参考文献:
.env
文件中的空格。我有:
.env
替换了我的example.env
以避免任何自定义配置错误。composer.json
,看看是否有所作为。以上都没有给我带来任何快乐。我也在另一台机器上设置相同的环境,应用程序正常工作。这里唯一的区别是机器(工作)没有从git克隆 - 这是最初的构建环境。
我收到的堆栈跟踪:
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
任何帮助将非常感激。提前致谢。
好的,经过几个小时的挖掘,找到了我的问题的解决方案。我说我的问题的原因是因为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在启动过程中中断。
最终,由于错误引导错误,调试您可能做错的事情是非常困难的。
我希望这可以帮助别人!
此问题通常是由.env文件中的单词之间的空格引起的。确保你有类似的东西
SITE_DESCRIPTION = Social Network for dogs
你替换它
SITE_DESCRIPTION = 'Social Network for dogs'
Uncaught ReflectionException: Class log does not exist
此错误来自laravel 5.2&>版本:
我的错误是:
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",
],
]
];
此错误可能是由其中一个配置文件中的错误引起的。要找到导致它的文件,请将/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,最后一个加载“key”是导致错误的配置文件。纠正它,不要忘记删除你的var_dump命令......祝你好运。
就我而言,我在配置文件中使用了route()
方法。显然,这种方法不起作用,因为这些文件不使用Illuminate Helper,它们只是带有数据的简单.php。
在实例化Log类之前读取配置文件,这会导致Jakehallas解释得非常好的错误。
是的,正如@jakehallas所说。它与例外情况无关。
实际上,如果有任何数据库问题或其他配置变量问题导致此问题。
实际上,当我试图在database.php中更改某些内容时,我只是复制了与database-copy.php相同的文件。我没想到这会引起问题。
在完成我之前所做的事情后,我刚刚删除了这个database-copy.php文件,它的工作正常...
谢谢 ...
删除.env文件中的空格后解决了这个问题(在sublime中查看.env,因为vi编辑器在.env文件的末尾没有显示空格。)并在命令下运行。
命令:
php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan clear-compiled
我在这里和其他地方尝试了很多解决方案。它对我不起作用。我通过手动删除/var/www/html/bootstrap/cache/compiled.php并更新自动加载文件解决了这个问题:
rm /var/www/html/bootstrap/cache/compiled.php
composer dump-autoload
我有同样的问题,这里没有解决方案
我发现config
文件夹被拒绝了一个例外
修复权限后一切正常!
怎么算?
在vendor/laravel/framework/src/illluminate/Foundation/Http/Kernel.php
放一个断点
第101行处理句柄功能。
这就是我发现被拒绝的许可的方式。
错过了项目的任何依赖项时出现此类错误。 Runphp composer.phar update
运行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
运行这个脚本。
在.env文件中,确保没有值的空格
例如,这是允许的
DB_USERNAME=homestead
这是不允许的
DB_USERNAME=home stead
如果有空格,可以用引号括起来。
DB_USERNAME="home stead"
真的希望他们使用json作为.env文件,也许我们应该要求该功能
既然没有人提到orchestra / testbench,我想我只是为我的问题添加解决方案。
当我在我的一个单元测试中遇到这个错误时,我正在写一个Laravel包。我正在使用orchestra/testbench
来测试Laravel特定的代码部分。
问题只是测试类扩展PHPUnit\Framework\TestCase
而不是Orchestra\Testbench\TestCase
。
我有一些负面价值
BUSINESS_RECONCILIATION_DAYS=-8
我需要包装
BUSINESS_RECONCILIATION_DAYS="-8"
通过修改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配置文件中定义闭包。
删除文件bootstrap/cache/config.php
。此文件可能不会显示在Windows上,如果是这样,请使用双指令器。 Definitelly会工作!
编辑:
它可能是由缓存.env文件引起的,如果是你的情况,请尝试删除bootstrap/cache/config.php
在我的.env文件中添加几行后,我注意到了同样的行为。不带引号的空格,因此可以修复如下:
APP_YOUR_NAME="A value with some spaces"
就我而言,缺少PDO扩展就是问题所在。安装后,问题得到解决。
编辑::
因为我对相当笨拙的调试和改造路径等不满意以使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
virtualbox版本并尝试失败:
1.0.1
(默认)和laravel/homestead-7
:
0.2.1
我在CLI中输入了一个CMD,并在app配置文件中意外输入了它。我必须遵循这个程序才能找到问题。
解决方案,如何找到问题:
https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist?page=2
另外,这是由于conf /目录或.env文件中某些文件中的语法错误。在我的情况下,我得到了这个错误,因为我忘了在添加服务提供程序和外观时,将::class
放在行的末尾,添加到数组提供程序和conf / app.php文件中的alises。我纠正了这个错误消失了。