Laravel - 未找到模型类

时间:2015-02-05 17:23:44

标签: php laravel

开始使用模型时出现以下错误

  

Class Post not found`。

我所做的一切:
- 使用命令php artisan make:model创建模型 - 尝试使用posts

获取表echo Post::all()中的所有条目

我使用了以下代码:

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 class not found

8 个答案:

答案 0 :(得分:72)

Laravel 5促进namespaces用于模型和控制器之类的东西。您的模型位于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

答案 1 :(得分:52)

我有同样的#34;未找到班级[班级名称]&#34;错误消息,但它不是命名空间问题。我的所有命名空间都已正确设置。我甚至试过composer dump-autoload,但它对我没有帮助。

令人惊讶的是(对我来说)我做了composer dump-autoload -o,根据Composer的帮助,&#34;优化PSR0和PSR4包也加载了类图,对生产有好处。&#34;以某种方式这样做会让作曲家表现得并在autoload_classmap.php文件中正确包含类。

答案 2 :(得分:4)

我在Laravel 5.2中遇到了同样的错误,结果是模型类定义中的命名空间不正确。

我使用以下命令创建了我的模型:

php artisan make:model myModel

默认情况下,Laravel 5在App文件夹下创建模型,但如果您要将模型移动到我所做的另一个文件夹,则必须更改模型定义中的命名空间:

namespace App\ModelFolder;

在创建可以使用的模型时包含文件夹名称(不要忘记使用双反斜杠):

php artisan make:model ModelFolder\\myModel

答案 3 :(得分:2)

在您的 router.php 文件中,应使用这样的模型类

 use App\Post;

并使用这样的模型类。

Route::get('/posts', function() {

        $results = Post::all();
        return $results; });

答案 4 :(得分:0)

正如@bulk所说,它使用命名空间。

我建议您开始使用IDE,它会建议您导入所有必需的命名空间(在这种情况下为\App\Post)。

答案 5 :(得分:0)

如果在更改命名空间后config/auth.php仍然失败,您可以尝试以下操作:

  1. 在文件vendor/composer/autoload_classmap.php中 换线 App\\User' => $baseDir . '/app/User.php',, 至 App\\Models\\User' => $baseDir . '/app/Models/User.php',

  2. 在文件开头app/Services/Registrar.php更改&#34;使用App \ User&#34;到&#34; App \ Models \ User&#34;

答案 6 :(得分:0)

在编辑模型文件时,请务必小心。例如,在您的帖子模型中:

<?php 
namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model {
    protected $table = 'posts';    
}

您需要密切注意class Post extend Model行。此处定义的类Post将是控制器的命名空间。

答案 7 :(得分:0)

对我来说,我创建了一个不带.php扩展名的ModelClass文件真的很愚蠢。因此,调用该模型并未找到模型。所以检查扩展名是否有.php