我有一个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;
我有点迷失了!
答案 0 :(得分:2)
命名空间是相对的,因此您无需添加用于直接引用同一命名空间中的类。
您获得的错误是因为您需要完全限定与命名空间模型的关系,因此雄辩地知道在哪里找到它们,例如
$this->belongsTo('\Acme\Models\Jobs');
对于存储库命名空间,您需要按照建议在文件中添加use语句,或者引用完全限定的命名空间,例如new \ Acme \ Models \ Job();
另一方面,我知道PHPStorm(我确定其他IDE)将为您注入名称空间,这非常有用,并且每次引用类时都可以省去编写使用或完整名称空间 - 值得退房。
编辑:抱歉,我第一次没有正确阅读问题 - 更新了我的答案。