ReflectionException:类ClassName不存在 - Laravel

问题描述 投票:37回答:19

很快,我正在输入php artisan db:seed命令。

我得错误了:

[ReflectionException] 类UserTableSeeder不存在

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

在这里,是我的UserTableSeeder.phpDatabaseSeeder.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'    => '[email protected]',
        '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()
    {
        //Model::unguard();

        Eloquent::unguard();
        $this->call('UserTableSeeder');

        //$this->call(UserTableSeeder::class);

        //Model::reguard();
    }
}

我正在引用这个Link来设计和开发登录页面。请帮我解决这个问题。谢谢。

php laravel laravel-5 artisan
19个回答
103
投票

执行composer update,然后composer dump-autoload

如果上述方法无法解决问题,请更改classmap文件中的composer.json,使其包含php文件的项目相对路径:

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

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

Edit by @JMSamudio

如果找不到composer dump-autoload,只需启用此选项composer config -g -- disable-tls true


1
投票

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


0
投票

当它在寻找播种器类文件时,您可以运行composer dump-autoload。当你再次运行它并且它正在寻找模型时,你可以在播种机文件本身上引用它。像这样,

use App\{Model};

0
投票

与问题没有严格关联,但收到错误ReflectionException: Class config does not exist

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

这个和我的应用程序是否再次起作用,不需要在Laravel Homestead(5.4)中继续开发


0
投票

我重新创建了课程,但它确实奏效了。复制所有文件内容,删除文件,然后运行php artisan make:seeder ModelTableSeeder。因为composer dump-autoload不适合我。


0
投票

您可以尝试在app大写中写use,所以App。为我工作。


0
投票
composer dump-autoload 

这将解决它


0
投票

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

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

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

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

0
投票
composer dump-autoload
php artisan config:clear
php artisan cache:clear

这肯定会奏效。如果不是那么,你需要做

composer update

然后,上述命令。


0
投票

检查你的大写!

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

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

  1. 拼字
  2. 命名空间
  3. 大写

0
投票
composer update 

以上命令对我有用。

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


11
投票

根据我的经验,当您尝试调用的类有一些错误并且无法编译时,这将显示在大部分时间。请检查未反映的课程是否可以自行执行。


11
投票

一个composer dump-autoload应该修复它。


4
投票

我有这个问题,我可以通过做php artisan config:cache解决它。问题是我之前已经运行过该命令,后来又包含了一些新的播种器类。缓存的配置无法识别新类。所以运行该命令再次起作用。

如果您发现自己经常更改以包含新的播种器类,那么请考虑运行php artisan config:clear。这将使您能够根据需要进行尽可能多的更改,然后在测试之后,您可以再次运行config:cache以使事情再次以最佳状态运行。


3
投票

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


3
投票

我和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'
    ];
}

1
投票

尝试使用以下命令

php artisan db:seed --class=DatabaseSeeder

1
投票

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

namespace App\Http\Controllers;

1
投票

我不是在写这个问题的答案。但是如果他们遇到同样的错误我想帮助别人,但这里提到的答案不起作用。我也试过这里提到的所有解决方案。但我的问题在于我使用的命名空间。路径错了。

我使用的命名空间是:

namespace App\Http\Controllers;

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

所以解决方案是将名称空间更改为:

namespace App\Http\Controllers\Frontend;
© www.soinside.com 2019 - 2024. All rights reserved.