【问题标题】:ReflectionException: Class ClassName does not exist - LaravelReflectionException:类 ClassName 不存在 - Laravel
【发布时间】:2015-12-05 04:57:37
【问题描述】:

我正在输入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');
    }
}

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

【问题讨论】:

  • 你用的是哪个版本的 laravel?
  • Laravel 5.0 @Aatif 先生。运行任何 Artisan 命令是否重要。
  • 让我尝试从我的一端运行它。我会让你知道结果。
  • 我的问题是该类使用了与其定义不同的大小写,例如:myTestClass vs MyTestClass。我在生产之前没有注意到这个问题,因为我在本地的文件系统与生产中的不同????

标签: php laravel laravel-5 laravel-artisan


【解决方案1】:

执行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

【讨论】:

  • 嗨艾哈迈德。 1) root@jbkinfotech-desktop:/# $php composer.phar update 2) root@jbkinfotech-desktop:/opt/lampp/htdocs/danish/laravel# $php composer.phar update 两者都没有找到 composer.phar 命令。对不起。我对 laravel 很陌生。不太懂指挥。我找到了 Composer.json 文件。我在那里编辑。但是,如何为 dump-autoload 命令编写命令。
  • 如果您在项目的 root 中键入 composer 并在 bash 中按 Enter 会发生什么。即例如你的项目在htdocs/danish/myProject,在这里执行。
  • root@danish-desktop:/opt/lampp/htdocs/danish/laravel# composer.它显示用法、可用命令
  • 现在,php artisan db:seed 显示新错误 [Symfony\Component\Debug\Exception\FatalErrorException] Class 'User' not found
  • 宾果游戏,如果您的 User 模型在 Models 文件夹中,我认为该行应该是 App\UserApp\Models\User
【解决方案2】:

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

【讨论】:

  • 这是给我的 - 很难找到!
  • 如果composer dump-autoload 没有修复它,试试这个。在一种情况下,我的命名空间错误
【解决方案3】:

composer dump-autoload 应该修复它。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 我无法相信像这样的小错误会导致如此误导性的错误消息,但是是的,它确实发生了。谢谢,你可能为我节省了几个小时。
      • 我也是。仔细查看代码,发现最后一个单引号缺少 'tipo_id' => 'required, 而不是正确的 'required',。感谢您的指导。
      【解决方案6】:

      检查您的大小写!

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

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

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:
          composer dump-autoload
          php artisan config:clear
          php artisan cache:clear
          

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

          composer update
          

          然后是上述命令。

          【讨论】:

            【解决方案9】:

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

            namespace App\Http\Controllers;
            

            【讨论】:

              【解决方案10】:

              如果问题没有被composer dump-autoload 解决或者不是新创建的类。

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

              【讨论】:

                【解决方案11】:

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

                use App\{Model};
                

                【讨论】:

                  【解决方案12】:

                  尝试使用以下命令

                  php artisan db:seed --class=DatabaseSeeder
                  

                  【讨论】:

                    【解决方案13】:

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

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

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

                    【讨论】:

                      【解决方案14】:

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

                      【讨论】:

                        【解决方案15】:

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

                        【讨论】:

                          【解决方案16】:

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

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

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

                          【讨论】:

                            【解决方案17】:

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

                            【讨论】:

                              【解决方案18】:

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

                              • 类中的命名空间是正确的。
                              • 类文件的文件路径正确。
                              • 路由文件中的控制器调用是正确的(当不考虑 RouteServiceProvider 中的前置命名空间时)
                              • RouteServiceProvider 中的默认 $router-&gt;group(['namespace' ...])不正确

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

                              【讨论】:

                                【解决方案19】:

                                检查文件/文件夹权限

                                我今天遇到了这个错误,没有多少缓存、配置、自动加载清除对我有任何帮助。更令人困惑的是,如果由 Web 请求启动,则会引发错误,但在 tinker 中访问该类工作正常。

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

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

                                【讨论】:

                                  【解决方案20】:

                                  不要将此作为这个问题的答案。如果它可以帮助其他有相同错误的人,但这里提到的答案对他们不起作用。我还尝试了这里提到的所有解决方案。但我的问题在于我使用的 命名空间。路径错误。

                                  我使用的命名空间是:

                                  namespace App\Http\Controllers;
                                  

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

                                  所以解决方案是将 namespace 更改为:

                                  namespace App\Http\Controllers\Frontend;
                                  

                                  【讨论】:

                                    【解决方案21】:
                                    composer dump-autoload 
                                    

                                    这会解决它

                                    【讨论】:

                                      【解决方案22】:
                                      composer update 
                                      

                                      以上命令对我有用。

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

                                      【讨论】:

                                        猜你喜欢
                                        • 2014-01-24
                                        • 2022-10-25
                                        • 1970-01-01
                                        • 2017-04-03
                                        • 2019-11-14
                                        • 2021-05-31
                                        • 2020-03-17
                                        • 2016-02-28
                                        • 1970-01-01
                                        相关资源
                                        最近更新 更多