Laravel名称空间问题

时间:2014-07-17 02:19:49

标签: php laravel namespaces

我有一个laravel 4.1应用程序,我在app文件夹中创建了一个文件夹来存储大部分逻辑。

/app/Acme/Models/
/app/Acme/Repositories/

这是两个主要文件夹。

在我的composer.json中,我在自动加载中有这个,并完成了转储运行。

    "psr-4" : {
            "Acme\\" : "app/Acme"
    }

但是我得到了,我认为是愚蠢的问题。例如,我的Acme / Models / Task.php具有以下内容

<?php
namespace Acme\Models;

class Task extends \Eloquent {

    public function job()
    {
        return $this->belongsTo('Job');
    }

}

然而,当我运行它时,我收到错误

Fatal error: Class 'Task' not found in vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php on line 780

在我的Job.php中,我在文件顶部有相同的命名空间....

我必须手动导入/使用同名空间中的对象吗? use Acme/Models/Job as Job;?它看起来像是重复......

当我设置namespace Acme/Repositories;的命名空间时,在我的Repositories文件夹中,我必须使用项目,例如

use Acme\Models\Job as Job;

我有点迷失了!

1 个答案:

答案 0 :(得分:2)

命名空间是相对的,因此您无需添加用于直接引用同一命名空间中的类。

您获得的错误是因为您需要完全限定与命名空间模型的关系,因此雄辩地知道在哪里找到它们,例如

$this->belongsTo('\Acme\Models\Jobs');

对于存储库命名空间,您需要按照建议在文件中添加use语句,或者引用完全限定的命名空间,例如new \ Acme \ Models \ Job();

另一方面,我知道PHPStorm(我确定其他IDE)将为您注入名称空间,这非常有用,并且每次引用类时都可以省去编写使用或完整名称空间 - 值得退房。

编辑:抱歉,我第一次没有正确阅读问题 - 更新了我的答案。

相关问题