Laravel 4.2,Model(eloquent)我找不到自己的类

时间:2015-03-30 16:21:59

标签: laravel model eloquent

我有这个奇怪的错误......我显然不能在我的项目中使用我的任何模型类.. Ad_category模型      

class Ad_category extends Eloquent {
    protected $table = 'ad_category';
    protected $fillable = array('*');
    use SoftDeletingTrait;
    protected $dates = ['deleted_at'];

}

调用此

$ad_cat=Ad_category::find(1);

错误

`Symfony \ Component \ Debug \ Exception \ FatalErrorException (E_ERROR)

Class 'Ad_category' not found `

1 个答案:

答案 0 :(得分:2)

PHP框架使用一个名为" autoloading"的系统。在要使用类时,在正确的类定义文件中自动includerequire。 Laravel 4.2中的自动加载有点transitional spot,这意味着您的问题有多个答案。

默认情况下,Laravel 4.2将在以下四个位置之一中查找名为Ad_category的类。

app/commands/Ad/category.php
app/controllers/Ad/category.php
app/models/Ad/category.php
app/database/seeds/Ad/category.php

也就是说,Laravel的自动加载器会自动将Ad_category转换为文件路径Ad/category.php,然后检查该文件的每个配置的自动加载路径。您可以在

中配置基本自动加载器路径
#File: app/start/global.php
ClassLoader::addDirectories(array(

    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/models',
    app_path().'/database/seeds',
));

Laravel 4.2也使用基于作曲家的自动加载。具体来说,是使用称为classmap自动加载的非常激进的作曲家自动加载形式。如果你查看composer.json文件,就会看到像这样的部分

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ]

手动运行命令时

$ composer dumpautoload

Composer将浏览上一节中的每个文件夹并查找PHP类文件。如果找到,则将其添加到vendor/composer/autoload_classes.php中的类图中。 Composer还会在更新期间自动运行此命令。

所以,这意味着,如果你在一个与Laravel希望找到它不同的位置定义Ad_category,你可以逃脱运行

$ composer dumpautoload

并且Laravel将使用Composer的自动加载器来查找您的课程。