ReflectionException:类ClassName不存在 - Laravel

时间:2015-09-09 09:30:00

标签: php laravel laravel-5 artisan

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

我得到错误赞:

  

[ReflectionException]
      类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()
    {
        //Model::unguard();

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

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

        //Model::reguard();
    }
}

我引用此Link设计&amp;开发登录页面。 请帮我解决这个问题。感谢。

20 个答案:

答案 0 :(得分:99)

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

答案 1 :(得分:11)

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

答案 2 :(得分:9)

composer dump-autoload应该修复它。

答案 3 :(得分:4)

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

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

答案 4 :(得分: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'
    ];
}

答案 5 :(得分:1)

尝试使用以下命令

php artisan db:seed --class=DatabaseSeeder

答案 6 :(得分:1)

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

namespace App\Http\Controllers;

答案 7 :(得分:1)

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

我使用的命名空间是:

namespace App\Http\Controllers;

但实际上控制器位于名为“ FrontEnd

的文件夹中

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

namespace App\Http\Controllers\Frontend;

答案 8 :(得分:1)

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

答案 9 :(得分:0)

检查文件/文件夹权限

我今天一直在为这个错误而苦苦挣扎,并且没有大量的缓存,配置,自动加载清除对您有所帮助。更令人困惑的是,如果是由Web请求启动的,则会引发该错误,但可以通过tinker访问该类。

检查错字,语法错误和不正确的命名空间后,我最终发现这是文件权限问题。包含我的课程的文件夹和文件没有适当的权限,因此引发了此错误。我将权限级别错误设置为771(文件夹)和660(文件),通过将其更改为775和664,我可以使其正常工作。

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

答案 10 :(得分:0)

在尝试到达自定义路由文件中的端点时出现了此错误,该端点的名称空间位于RouteServiceProvider

  • 该类中的名称空间正确。
  • 类文件的文件路径正确。
  • 从路由文件进行的控制器调用是正确的(未考虑来自RouteServiceProvider的前置名称空间)
  • $router->group(['namespace' ...])中的默认RouteServiceProvider不正确

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

答案 11 :(得分:0)

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

检查类及其特征中的语法错误。 在我的情况下,一个Trait中存在语法错误,但是实际使用该Trait的Class显示了ReflectionException

答案 12 :(得分:0)

检查您的大小写!

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

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

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

答案 13 :(得分:0)

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

这肯定会起作用。 如果不是,则需要

composer update

,然后是上述命令。

答案 14 :(得分:0)

当您忘记关闭连接时,幼虫测试中通常会显示错误消息$file = tmpfile(); fwrite($file, 'some initial content'); $path = stream_get_meta_data($file)['uri']; system("notepad $path"); // process the file afterwards

如果您在测试中使用setUp或tearDown函数,请不要忘记通过调用ReflectionException: Class app does not existparent::setUp来关闭连接

parent::tearDown

答案 15 :(得分:0)

作曲家更新

以上命令为我工作。

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

答案 16 :(得分:0)

composer dump-autoload 

这将解决它

答案 17 :(得分:0)

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

答案 18 :(得分:0)

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

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

这和我的应用程序是否再次起作用,不需要在Laravel Homestead(5.4)的开发中进行配置清除

答案 19 :(得分:0)

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

use App\{Model};