1

zf2 数据库和模型教程中,这样的路径指向包含我的模型类的目录:

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()),但没有成功。

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

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

4

1 回答 1

0

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

也就是说,

如果我不应该这样做,有人可以解释为什么吗?

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

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

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

我假设你的意思是专辑/src/专辑。这种冗余是为了保持一个干净整洁的 PSR-0设置。所以,第一个 Album 是标识模块,第二个是 Album 命名空间的顶层。这提供了最大的灵活性,但不是硬性规定。请参阅 Rob Allen 最近关于zf2 中的替代模块布局的博客文章以进行探索。

于 2013-01-11T00:14:09.450 回答