在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())但没有成功。
有谁知道我怎么做到这一点?如果我不应该这样做,有人可以解释为什么吗?我也有兴趣知道为什么文件夹结构是专辑/模型/专辑(这似乎是多余的,我不清楚教程中的解释)。
任何给予的帮助都会很棒,谢谢:)
答案 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的博客文章。