ZF2目录/命名空间模型对象位置

时间:2013-01-10 23:31:50

标签: zend-framework2

zf2 database and models tutorial这样的路径会导致包含我的模型类的目录:

module/Album/src/Album/Model

我已经创建了两个类:

module/Album/src/Album/Model/AlbumRelatedClass.php
module/Album/src/Album/Model/AlbumRelatedTable.php

我想把这些课程放在

module/Album/src/AlbumRelated/Model/

为了进行此测试,我已经创建了模型类的副本,不幸的是,我的Album模块配置告诉我它无法在AlbumRelated位置找到类。我已经尝试将AlbumRelated位置中的名称空间更改为AlbumRelated \ Model,并直接引用类位置(\ Album \ Model \ AlbumRelated())但没有成功。

有谁知道我怎么做到这一点?如果我不应该这样做,有人可以解释为什么吗?我也有兴趣知道为什么文件夹结构是专辑/模型/专辑(这似乎是多余的,我不清楚教程中的解释)。

任何给予的帮助都会很棒,谢谢:)

1 个答案:

答案 0 :(得分:0)

简短的回答是它无法找到该类,因为您可能没有设置自动加载器配置来了解新的“AlbumRelated”命名空间。看看\Album\Module::getAutoloaderConfig()中发生了什么。您可能希望将键/值对添加到namespaces 'AlbumRelated' => __DIR__ . '/src/AlbumRelated'。这将告诉自动加载器在AlbumRelated命名空间下查找类的位置。

那就是说,

  

如果我不这样做,有人可以解释原因吗?

你可能不应该这样做。您有一个名为\Album的顶级命名空间。然后你下面有\Album\Model命名空间。任何与专辑相关的模特都应该住在那里。想象一下,您的系统中有一个实体用于记录标签,因此您可以将相册与发布它的标签相关联。 ZF2的期望是你要创建一个名为\Album\Model\RecordLabel的类,它位于module/Album/src/Album/Model/RecordLabel.php。只要我们假设RecordLabel主要与专辑相关,那一切都非常有意义。

当然,如果你有很多管理它们的工作流程,你可以将RecordLabel粘贴在它自己的模块中。

  

我也很想知道为什么文件夹结构是专辑/模特/专辑

我认为你的意思是Album / src / Album。这种冗余是为了保持良好的干净PSR-0设置。因此,第一个Album标识模块,第二个是Album名称空间的顶级。这提供了最大的灵活性,但不是一个硬性规定。请参阅Rob Allen最近发表的关于alternative module layouts in zf2的博客文章。