我是MVC和ZF2的新手。
我成功完成了他们的教程,以构建一个基本的应用程序。 (http://framework.zend.com/manual/2.1/en/user-guide/overview.html)。在该教程中,他们创建了一个名为“Album”的模块来添加/编辑/删除音乐专辑。
我想要做的是创建一个具有各种功能的应用程序,例如用户帐户管理,系统配置等。我知道通过阅读其他帖子,您不需要为每个帖子创建新模块函数,而不是使用实体将它们分组。
考虑到这一点,我开始使用这种结构创建我的第一个模块'User',但我不确定我是否正确行事。我目前的结构是:
/module
/Application
/config
/language
/view
/src
/Application
/Controller
/UserController.php
/Entity
/User.php
/UserTable.php
/view
/user
/user
/index
如果您想查看代码,请查看https://bitbucket.org/newvisionjames/zf2-test/overview
处的回购我的具体问题是:
1)目前我有两个“查看”目录,非常肯定这是错误的......哪一个是正确的,如果有的话?
2)在ZF2教程中,他们在/model
下创建了两个名为Album.php
和AlbumTable.php
的php文件。我已经反映出这是我的/Entity
文件夹。这种直接转移是否正确?是否有/Entity
目录不需要/model
?
感谢。
答案 0 :(得分:1)
ZF2遵循PSR-0标准,这也提高了其他框架模块与ZF2交互的能力。要了解有关PSR-0标准的更多信息,请查看此处:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
以上提到用户的示例,由于“用户”的性质,您很可能会将用户保留在自己的模块中。用户是否只包含一个表示用户的类,还是包含用于授权和身份验证等的挂钩?这些路线也是如何处理的?虽然乍一看用户看起来很简单,但通常会将其放置在自己的模块中。
这样您就可以重复使用/与他人共享您的模块。通常,每当我构建应用程序时,它将根据功能适合的位置移动到多个模块中。然后在模块之间,如果我需要访问另一个模块,我将使用服务定位器来访问这些方法。
例如在应用程序模块下我可能想要引用用户的名字,我可以调用用户模块服务然后向我显示用户的详细信息。这大大简化了您的代码。
直接回答你的问题:
答案: 根据您发布的目录结构,只有顶级“视图”目录在“ZFSekeleton”表示中看起来是正确的。
答案: 从技术上讲,只要遵循命名空间/ psr-0标准,您就可以将业务逻辑放在任何位置。除此之外没有真正的要求,尽管使用编码器对您来说重要的是提高代码的可读性,否则您将无法快速获得。
我通常喜欢分开我的src文件夹:
控制器 楷模 适配器 服务 实体
其中控制器显然是zf2的控制器。模型包含控制器或类的一些业务逻辑。适配器是身份验证适配器,数据库适配器等。服务是其他模块和当前模块的服务定位器类。实体是我的数据表示。
对他们自己而言,这对我来说是有意义的。希望有所帮助。
答案 1 :(得分:1)
写得很好,格式很好的问题。不要经常看到这一点。
src
处于同一级别的那个。 src下的所有内容都是类文件。所以他们遵循PSR-0标准,每个文件都包含一个类,等等。所以你不想要任何意见。model
目录,这可能会将您的所有实体放在Module\Entity
内。所以这是绝对正确的。总的来说,我告诉你:坚持使用config
,src
,view
个文件夹。这就是ZF2所喜欢的,这也是ZF2开发人员对ZF2模块所期望的。不过,请不要过多地关注src
文件夹中的约定。你几乎可以把你想要的东西放在那里。如果你有一个不错的IDE(比如PhpStorm),那么稍后移动或重命名类只需要几秒钟。只需在GitHub上浏览一些ZF2模块,然后尝试匹配最常见的分组或层次结构。
以下是关于模块分离的一些说法:我说这是一个很好的做法,尽可能尝试将项目分解为模块,只要你认为它们可以单独存在。例如:您有一个包含大量产品和搜索功能的在线商店。现在问问自己以下问题:"产品是否需要搜索功能?"没有。产品可以没有它。因此,您将搜索功能放在自己的ProductSearch
模块中。博客文章可以没有他们的评论吗?是。创建Blog
和BlogComment
模块。
当我开始使用ZF2时,我正在考虑整个项目结构。因此,如果您有任何其他问题,请发表评论,我会尝试更新我的答案。
答案 2 :(得分:0)