ReflectionException: Class Class名称不存在 - Laravel

ReflectionException: Class ClassName does not exist - Laravel

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

我收到 错误 赞:

[ReflectionException]
Class UserTableSeeder does not exist

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');
    }
}

我参考这个 Link 来设计和开发登录页面。 请帮我解决这个问题。谢谢。

执行 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,它现在应该像 breeze!

@JMSamudio 编辑

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

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

use App\{Model};

根据我的经验,当您尝试调用的 class 存在一些错误且无法编译时,大多数情况下都会出现这种情况。检查未反映的class是否可以自行执行

composer dump-autoload 应该可以修复它。

尝试使用以下命令

php artisan db:seed --class=DatabaseSeeder

您需要为它指定一个名称 space 才能找到它。

namespace App\Http\Controllers;

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

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

与问题不严格相关但收到错误 ReflectionException: Class config does not exist

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

这个和我的应用程序声明再次工作了吗,不需要清除配置,因为仍在开发 Laravel Homestead (5.4)

不要以此作为本题的答案。如果它可以帮助其他人解决同样的错误,但这里提到的答案对他们不起作用。我还尝试了这里提到的所有解决方案。但我的问题出在我使用的 namespace 上。路径错误。

我使用的命名空间是:

namespace App\Http\Controllers;

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

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

namespace App\Http\Controllers\Frontend;

我重新创建了 class,它成功了。复制所有文件内容,删除文件,运行php artisan make:seeder ModelTableSeeder。因为 composer dump-autoload 对我不起作用。

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

然后我决定阅读我的代码来寻找问题,我找到了问题所在。我的问题是 class 中缺少逗号。查看我的模型代码:

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

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

您可以尝试将 app 写成 use 大写,因此 App。为我工作。

composer dump-autoload 

这将解决它

composer update 

以上命令对我有用。

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

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

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

来关闭连接
    public function setUp()
    {
        parent::setUp();
    }

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

在使用 psr-0 的情况下,检查 class 名称不包含下划线。

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

这肯定行得通。 如果不是那么,你需要做

composer update

然后,上述命令。

检查你的大小写!

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

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

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

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

检查 class 及其特征中的语法错误。 在我的例子中,特征中存在语法错误,但是 ReflectionException 显示为使用该特征的实际 Class。

我在尝试到达自定义路由文件中的端点时遇到此错误,该文件在 RouteServiceProvider

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

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

检查 file/folder 权限

今天我遇到了这个错误,缓存、配置、自动加载清除都无济于事。更令人困惑的是,如果由 Web 请求发起,则会抛出错误,但在 tinker 中访问 class 工作正常。

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

我对不同行为的理解是,当从命令行 运行 时,它以我的用户身份读取文件(它拥有它需要的所有权限),但是当从 Web 启动时,它使用“其他”权限组什么也做不了。