我有一个 Laravel 4.1 应用程序,我在我的应用程序文件夹中创建了一个文件夹来存储大部分逻辑。
/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;
我是,有点失落!
最佳答案
命名空间是相对的,因此您不需要添加 use 来直接引用同一命名空间中的类。
您遇到的错误是因为您需要完全限定与命名空间模型的关系,以便 eloquent 知道在哪里可以找到它们,例如
$this->belongsTo('\Acme\Models\Jobs');
对于存储库命名空间,您需要按照建议在文件中添加 use 语句,或引用完全限定的命名空间,例如 new\Acme\Models\Job();
附带说明一下,我知道 PHPStorm(我相信其他 IDE)会为您注入(inject)命名空间,这非常有用,并且每次引用类时都不必编写 use 或完整的命名空间 - 值得一试。
编辑:抱歉,我第一次没有正确阅读问题 - 更新了我的答案。
关于php - Laravel 命名空间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24793840/