php - Laravel 命名空间问题

标签 php laravel namespaces

我有一个 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/

相关文章:

php - 自动完成不返回搜索到的值,但它返回所有值(在 PHP、jQuery 中)

php - 连接所有表时删除多个表中的数据 php laravel

php - 数组值的处理方式与手动输入不同

php - Laravel 以编程方式获取特定页面

xml - 在 DTD 中,为什么命名空间作为 URL 给出?

c++ - toupper属于哪个命名空间

php - 删除然后插入偶尔会因重复键而失败

php - 如何正确运行需要大量处理的查询而不会出错

php - 单击 Laravel 按钮上的“查看”切换数据库值

php - 如何在单独的命名空间中包含几乎相同的文件(用于调试目的)