Zend Framework的新功能2.如何正确构建模块?

时间:2014-11-13 17:34:51

标签: php zend-framework zend-framework2

我是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.phpAlbumTable.php的php文件。我已经反映出这是我的/Entity文件夹。这种直接转移是否正确?是否有/Entity目录不需要/model

总的来说,我要做的就是设置这个框架,以便它能够正常运行,我将能够从那里学习,但是现在我被卡住了!任何有用的答案或对有用资源的指示都将非常感激。

感谢。

3 个答案:

答案 0 :(得分:1)

ZF2遵循PSR-0标准,这也提高了其他框架模块与ZF2交互的能力。要了解有关PSR-0标准的更多信息,请查看此处:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

以上提到用户的示例,由于“用户”的性质,您很可能会将用户保留在自己的模块中。用户是否只包含一个表示用户的类,还是包含用于授权和身份验证等的挂钩?这些路线也是如何处理的?虽然乍一看用户看起来很简单,但通常会将其放置在自己的模块中。

这样您就可以重复使用/与他人共享您的模块。通常,每当我构建应用程序时,它将根据功能适合的位置移动到多个模块中。然后在模块之间,如果我需要访问另一个模块,我将使用服务定位器来访问这些方法。

例如在应用程序模块下我可能想要引用用户的名字,我可以调用用户模块服务然后向我显示用户的详细信息。这大大简化了您的代码。

直接回答你的问题:

  1. 目前我有两个'查看'目录,非常肯定这是错误的......哪一个是正确的,如果有的话?
  2. 答案: 根据您发布的目录结构,只有顶级“视图”目录在“ZFSekeleton”表示中看起来是正确的。

    1. 在ZF2教程中,他们在/ model下创建了两个名为Album.php和AlbumTable.php的php文件。我已经反映出这是我的/ Entity文件夹。这种直接转移是否正确?是否有/ Entity目录渲染/ model不是必需的?
    2. 答案: 从技术上讲,只要遵循命名空间/ psr-0标准,您就可以将业务逻辑放在任何位置。除此之外没有真正的要求,尽管使用编码器对您来说重要的是提高代码的可读性,否则您将无法快速获得。

      我通常喜欢分开我的src文件夹:

      控制器 楷模 适配器 服务 实体

      其中控制器显然是zf2的控制器。模型包含控制器或类的一些业务逻辑。适配器是身份验证适配器,数据库适配器等。服务是其他模块和当前模块的服务定位器类。实体是我的数据表示。

      对他们自己而言,这对我来说是有意义的。希望有所帮助。

答案 1 :(得分:1)

写得很好,格式很好的问题。不要经常看到这一点。

  1. 更高级别的是正确的。与src处于同一级别的那个。 src下的所有内容都是类文件。所以他们遵循PSR-0标准,每个文件都包含一个类,等等。所以你不想要任何意见。
  2. 看起来很不错,但是我使用Doctrine而不是ZF2的ORM,我无法确定。我可以告诉您的是,您不需要model目录,这可能会将您的所有实体放在Module\Entity内。所以这是绝对正确的。
  3. 总的来说,我告诉你:坚持使用configsrcview个文件夹。这就是ZF2所喜欢的,这也是ZF2开发人员对ZF2模块所期望的。不过,请不要过多地关注src文件夹中的约定。你几乎可以把你想要的东西放在那里。如果你有一个不错的IDE(比如PhpStorm),那么稍后移动或重命名类只需要几秒钟。只需在GitHub上浏览一些ZF2模块,然后尝试匹配最常见的分组或层次结构。

    以下是关于模块分离的一些说法:我说这是一个很好的做法,尽可能尝试将项目分解为模块,只要你认为它们可以单独存在。例如:您有一个包含大量产品和搜索功能的在线商店。现在问问自己以下问题:"产品是否需要搜索功能?"没有。产品可以没有它。因此,您将搜索功能放在自己的ProductSearch模块中。博客文章可以没有他们的评论吗?是。创建BlogBlogComment模块。

    当我开始使用ZF2时,我正在考虑整个项目结构。因此,如果您有任何其他问题,请发表评论,我会尝试更新我的答案。

答案 2 :(得分:0)