当开始使用模型时,我得到了以下错误
找不到类帖子`。
我所做的一切:
-使用命令php artisan make:model
创建模型
-尝试使用echo Post::all()
从表posts
获取所有条目
我使用了以下代码:
router.php
Route::get('/posts', function(){
$results = Post::all();
return $results;
});
Post.php
<?php
namespace App;
use Illuminate'Database'Eloquent'Model;
class Post extends Model {
protected $table = 'posts';
}
我尝试过的
-重命名类
-转储自动加载(未找到Laravel 4 Model类)
Laravel 5促进了名称空间在模型和控制器等方面的使用。您的Model位于App
命名空间下,因此您的代码需要这样调用它:
Route::get('/posts', function(){
$results = 'App'Post::all();
return $results;
});
如注释中所述,您也可以use
或将命名空间导入到文件中,这样您就不需要引用完整路径,如下所示:
use App'Post;
Route::get('/posts', function(){
$results = Post::all();
return $results;
});
当我对名称空间做一个简短的入门时,我还可以提到别名类的能力。这样做意味着您基本上可以在一个文件的范围内重命名类,如下所示:
use App'Post as PostModel;
Route::get('/posts', function(){
$results = PostModel::all();
return $results;
});
有关导入和别名名称空间的详细信息,请点击此处:http://php.net/manual/en/language.namespaces.importing.php
我收到了相同的"class[class-name]not found"错误消息,但这不是命名空间问题。我所有的命名空间都设置正确。我甚至试过composer dump-autoload
,但它对我没有帮助
让我惊讶的是,我后来做了composer dump-autoload -o
,根据Composer的帮助,"优化了PSR0和PSR4包,使其也能加载类映射,这对生产很有好处。"不知怎么的,这样做让Composer能够正确地将类包含在autoload_classmap.php文件中。
我在Laravel 5.2中遇到了同样的错误,结果发现模型类定义中的命名空间不正确。
我使用以下命令创建了我的模型:
php artisan make:model myModel
默认情况下,Laravel 5在App
文件夹下创建模型,但如果你像我一样将模型移动到另一个文件夹,你也必须更改模型定义中的名称空间:
namespace App'ModelFolder;
在创建可以使用的模型时包括文件夹名称(不要忘记使用双斜杠):
php artisan make:model ModelFolder''myModel
我也遇到过同样的问题,但事实证明composer为Laravel 8.*创建了一个单独的Models文件夹,所以不是
use App'Post;
我不得不写:
use App'Models'Post;
编辑模型文件时一定要小心。例如,在您的后模型中:
<?php
namespace App;
use Illuminate'Database'Eloquent'Model;
class Post extends Model {
protected $table = 'posts';
}
您需要密切关注class Post extend Model
行。这里定义的类Post
将是控制器的名称空间。
对我来说,创建一个没有.php扩展名的ModelClass文件真的很傻。所以调用那个并没有找到给定的模型。因此,请检查扩展是否有.php
我遇到了同样的问题。事实证明,我的Post模型在一个名为Post.php 的php文件中
=>文件名必须与类的名称匹配(Post.php文件中的Post类)
在router.php文件中,您应该使用类似以下的模型类
use App'Models'Post;
并像这样使用模型类。
Route::get('/posts', function() {
$results = Post::all();
return $results; });
Class not found
错误的一个原因是字符区分大小写,所以如果命名空间是namespace App'Model;
,如果您像这里的App'model'User
一样调用它,则由于model
而显示错误Class not found
=Model
。
如果您使用OPCache
,可能由于某种原因,您的类在OPCache中没有索引,因此您必须通过重新启动PHP来重新索引这些类(下面的示例适用于Nginx和Ubuntu上的PHP 8.1 FPM)。
sudo service php8.1-fpm restart
正如@bulk所说,它使用名称空间。
我建议您开始使用IDE,它将建议您导入所有必需的名称空间(在本例中为'App'Post
)。
如果在更改名称空间和config/auth.php
后仍然失败,您可以尝试以下操作:
-
在文件
vendor/composer/autoload_classmap.php
中更改线路CCD_ 21,到App''Models''User' => $baseDir . '/app/Models/User.php',
-
在文件
app/Services/Registrar.php
的开头,将"use App''User"更改为"App''Models''User"