ReflectionException:类ClassName不存在-Laravel


ReflectionException: Class ClassName does not exist - Laravel

我正在键入php artisan db:seed命令。

我得到错误喜欢:

[反射异常]
类UserTableSeeder不存在

root@dd-desktop:/opt/lampp/htdocs/dd/laravel# php artisan db:seed

这是我的UserTableSeeder.php&DatabaseSeeder.php页面

UserTableSeeder.php

<?php
use Illuminate'Database'Seeder;
use Illuminate'Database'Eloquent'Model;
class UserTableSeeder extends Seeder
{    
    public function run()
    {
        DB::table('users')->delete();
        User::create(array(
        'name'     => 'Chris Sevilleja',
        'username' => 'sevilayha',
        'email'    => 'chris@scotch.io',
        'password' => Hash::make('awesome'),
        ));
    }    
}

DatabaseSeeder.php

<?php
use Illuminate'Database'Seeder;
use Illuminate'Database'Eloquent'Model;
class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Eloquent::unguard();
        $this->call('UserTableSeeder');
    }
}

我将此链接引用到设计&开发登录页面。请帮我解决这个问题。谢谢

先执行composer update,然后执行composer dump-autoload

如果以上内容不能解决问题,请更改composer.json文件中的classmap,使其包含指向php文件的项目相对路径:

"autoload-dev": {
    "classmap": [
        "tests/TestCase.php",
        "database/seeds/UserTableSeeder.php" //include the file with its path here
    ]
}, /** ... */

不久之后,执行composer dump-autoload,它现在应该像微风一样工作

编辑:@JMSamudio

如果未找到composer dump-autoload,请启用此选项composer config -g -- disable-tls true

根据我的经验,当你试图调用的类有一些错误并且无法编译时,大多数时候都会出现这种情况。检查未被反射的类是否可以自己执行。

composer dump-autoload应该修复它。

p>我遇到了这个问题,我可以通过执行php artisan config:cache来解决它。问题是,我以前已经运行过该命令,后来又包含了一些新的种子程序类。缓存的配置无法识别新类。因此,再次运行该命令起到了作用。

如果您看到自己频繁地进行更改以包含新的种子程序类,那么可以考虑运行php artisan config:clear。这将使您能够进行任意多的更改,然后在测试后,您可以再次运行config:cache,使事情再次以最佳方式运行。

我对class也有同样的问题。我尝试了composer dump-autoloadphp artisan config:clear,但它没有解决我的问题。

然后我决定阅读我的代码来找到问题,我发现了问题。我的问题是班上少了一个逗号。查看我的型号代码:

{
    protected
    $fillable = ['agente_id', 'matter_id', 'amendment_id', 'tipo_id'];
    public
    $rules = [
        'agente_id' => 'required', // <= See the comma
        'tipo_id' => 'required'
    ];
    public
    $niceNames = [
        'agente_id' => 'Membro', // <= This comma is missing on my code
        'tipo_id' => 'Membro'
    ];
}

检查您的资本

默认情况下,您的主机系统(Windows或Mac(不区分大小写,Homestead会继承此行为。另一方面,您的生产服务器区分大小写。

每当您收到ClassNotFound异常时,请检查以下内容:

  1. 拼写
  2. 命名空间
  3. 资本化

由于某种原因,我不得不运行composer dumpautoload -o。注意标志-o,它意味着优化。我不知道为什么它只适用于它,但请尝试一下。也许这对某人有帮助。

composer dump-autoload
php artisan config:clear
php artisan cache:clear

这肯定会奏效。如果没有,你需要做

composer update

然后执行上述命令。

您需要将其分配到一个名称空间才能找到。

namespace App'Http'Controllers;

如果composer dump-autoload未解决该问题或该问题不是新创建的类。

检查类中的语法错误及其特征。在我的案例中,一个Trait中出现了语法错误,但实际的Class显示了ReflectionException,而使用了该Trait。

在查找种子程序类文件时,可以运行composer dump autoload。当您再次运行它并且它正在查找模型时,您可以在种子程序文件本身上引用它。像这样,

use App'{Model};

尝试使用以下命令

php artisan db:seed --class=DatabaseSeeder

与问题无关,但收到错误ReflectionException: Class config does not exist

我添加了一个新的.env变量,其中包含空格。运行php artisan config:clear时告诉我,任何包含空格的.env变量都应该被" s包围。

这样做了,我的应用程序又开始工作了,不需要像在Laravel Homestead(5.4(上一样进行配置清除。

我已经重新创建了类,并且它工作了。复制所有文件内容,删除文件,然后运行php artisan make:seeder ModelTableSeeder。因为composer dump-autoload对我不起作用。

你可以试着用use大写写app,所以App。为我工作。

通常当你忘记关闭连接时,幼虫测试中会出现错误消息ReflectionException: Class app does not exist

如果您在测试中使用setUp或tearDown函数,请不要忘记通过调用parent::setUpparent::tearDown 来关闭连接

    public function setUp()
    {
        parent::setUp();
    }
    public function tearDown()
    {
        parent::tearDown();
    }

如果使用psr-0,请检查类名是否包含下划线。

我在尝试到达自定义路由文件中的端点时遇到了这个错误,该文件在RouteServiceProvider 中预先设置了一个命名空间

  • 类中的命名空间是正确的
  • 类文件的文件路径正确
  • 路由文件中的控制器调用是正确的(当没有考虑来自RouteServiceProvider的预置命名空间时(
  • RouteServiceProvider中的默认$router->group(['namespace' ...])不正确

更新RouteServiceProvider中的命名空间解决了这个问题,因为路由文件中指定的相对控制器路径现在已经正确解析。

检查文件/文件夹权限

我今天很难处理这个错误,再多的缓存、配置和自动加载清除也无济于事。更令人困惑的是,如果是由web请求发起的,则会引发错误,但在修补程序中访问该类效果良好。

在检查了拼写错误、语法错误和不正确的名称空间后,我最终发现这是一个文件权限问题。包含我的类的文件夹和文件没有适当的权限,因此它引发了此错误。我的权限级别不正确,是771(文件夹(和660(文件(,通过将其更改为775和664,我可以使其正常工作。

我对不同行为的理解是,当从命令行运行时,它是作为我的用户读取文件(它拥有所需的所有权限(,但当从web启动时,它使用";其他";无法执行任何操作的权限组。

不要把这个当作这个问题的答案。如果它帮助了其他有同样错误的人,但这里提到的答案对他们不起作用。我也尝试了这里提到的所有解决方案。但我的问题是我使用的命名空间。路径错误。

我使用的名称空间是:

namespace App'Http'Controllers;

但实际上,控制器位于名为">FrontEnd"的文件夹中

因此,解决方案是将命名空间更改为:

namespace App'Http'Controllers'Frontend;

对于新的Laravel用户来说,忘记添加名称空间是一个常见的错误:

路由/web.php

use App'Http'Controllers'CompanyController;

app/Http/Controllers/CompanyController.php

namespace App'Http'Controllers;

使用Laravel 9。

composer dump-autoload 

这将修复

composer update 

以上命令对我有效。

每当您在la ravel中进行新的迁移时,都需要刷新composer.json文件中的classmap