我正在键入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
应该修复它。
php artisan config:cache
来解决它。问题是,我以前已经运行过该命令,后来又包含了一些新的种子程序类。缓存的配置无法识别新类。因此,再次运行该命令起到了作用。
如果您看到自己频繁地进行更改以包含新的种子程序类,那么可以考虑运行php artisan config:clear
。这将使您能够进行任意多的更改,然后在测试后,您可以再次运行config:cache
,使事情再次以最佳方式运行。
我对class
也有同样的问题。我尝试了composer dump-autoload
和php 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异常时,请检查以下内容:
- 拼写
- 命名空间
- 资本化
由于某种原因,我不得不运行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::setUp
和parent::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
。