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-autoload
和 php 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::setUp
和 parent::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 异常时,请检查以下内容:
- 拼写
- 命名空间
- 大写
如果问题未被 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 启动时,它使用“其他”权限组什么也做不了。
我正在输入 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-autoload
和 php 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::setUp
和 parent::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 异常时,请检查以下内容:
- 拼写
- 命名空间
- 大写
如果问题未被 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 启动时,它使用“其他”权限组什么也做不了。