[英]Laravel - Model Class not found
开始使用模型时出现以下错误
找不到类帖子`。
我所做的一切:
- 使用命令php artisan make:model
创建模型
- 尝试使用echo Post::all()
从表格posts
中获取所有条目
我使用了以下代码:
路由器.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 模型类)
Laravel 5 提倡在模型和控制器等事物中使用命名空间。 您的模型位于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
我遇到了相同的“找不到类 [类名]”错误消息,但这不是命名空间问题。 我所有的命名空间都设置正确。 我什至尝试了composer dump-autoload
并没有帮助我。
令人惊讶的是(对我来说)然后我做了composer dump-autoload -o
根据 Composer 的帮助,“优化 PSR0 和 PSR4 包以加载类映射,这对生产有好处。” 不知何故,这样做让作曲家在 autoload_classmap.php 文件中正确地表现并包含该类。
我在 Laravel 5.2 中遇到了同样的错误,结果发现模型类定义中的命名空间不正确。
我使用以下命令创建了我的模型:
php artisan make:model myModel
默认情况下,Laravel 5 在App
文件夹下创建模型,但是如果您像我一样将模型移动到另一个文件夹,您也必须更改模型定义中的命名空间:
namespace App\ModelFolder;
要在创建模型时包含文件夹名称,您可以使用(不要忘记使用双反斜杠):
php artisan make:model ModelFolder\\myModel
我有同样的问题,但事实证明作曲家为 Laravel 8.* 创建了一个单独的模型文件夹,所以而不是
use App\Post;
我不得不写:
use App\Models\Post;
在你的router.php文件中,你应该像这样使用模型类
use App\Models\Post;
并像这样使用模型类。
Route::get('/posts', function() {
$results = Post::all();
return $results; });
正如@bulk 所说,它使用命名空间。
我建议您开始使用 IDE,它会建议您导入所有必需的命名空间(在本例中为\App\Post
)。
如果更改命名空间和config/auth.php
后仍然失败,您可以尝试以下操作:
在文件vendor/composer/autoload_classmap.php
中更改行App\\User' => $baseDir . '/app/User.php',
App\\User' => $baseDir . '/app/User.php',
, 到App\\Models\\User' => $baseDir . '/app/Models/User.php',
App\\Models\\User' => $baseDir . '/app/Models/User.php',
在文件app/Services/Registrar.php
的开头将“use App\User”更改为“App\Models\User”
编辑模型文件时请务必小心。 例如,在您的帖子模型中:
<?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 类)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.