【问题标题】:AppBundle's Best Practice and how-to go furtherAppBundle 的最佳实践以及如何走得更远
【发布时间】:2015-06-21 19:26:06
【问题描述】:

根据 文档网站上的this page,他们解释了如何处理您的应用程序逻辑和最佳实践。我在本文档中缺少的一件事是存储和使用实体的方式。有一个 small section 涵盖了您的实体中注释的使用,但我们现在都在使用它,我希望你也这样做。

到目前为止,我的项目有以下实体:

+------------------------------------------------------------------------+
| Filename              | Location                          | Type       |
+------------------------------------------------------------------------+
| Account.php           | src/AppBundle/Entity              | Entity     |
| AccountRepository.php | src/AppBundle/Entity/Repositories | Repository |
| News.php              | src/AppBundle/Entity              | Entity     |
| NewsRepository.php    | src/AppBundle/Entity/Repositories | Repository |
+------------------------------------------------------------------------+

现在我无法创建 Forum.php 实体,因为我需要 4 个数据库表:

  • forum_sections
  • 论坛类别
  • 论坛主题
  • 论坛帖子

我是否需要在src/AppBundle/Entity 的一个名为 Forum.php 的文件中创建 4 个实体,或者我是否需要做其他事情来归档存储和使用这些实体的最佳实践方式。例如ForumSections.php 和其他三个文件似乎占用了大量空间,而且很丑。

感谢您的阅读,并提前感谢您抽出时间回复。如果我的问题中有任何拼写错误,我深表歉意。

【问题讨论】:

    标签: symfony php symfony doctrine-orm entity


    【解决方案1】:

    如果您遵循与现有实体相同的策略,则需要在以下文件中定义四个实体:

    src/AppBundle/Entity/ForumCategory.php
    src/AppBundle/Entity/ForumPost.php
    src/AppBundle/Entity/ForumSection.php
    src/AppBundle/Entity/ForumTopic.php
    

    那么,每个实体的命名空间将是namespace AppBundle\Entity;

    但是,当您有多个相关实体时,最好在Entity/ 目录中创建一个子目录。因此,您可以执行以下操作:

    src/AppBundle/Entity/Forum/Category.php
    src/AppBundle/Entity/Forum/Post.php
    src/AppBundle/Entity/Forum/Section.php
    src/AppBundle/Entity/Forum/Topic.php
    

    使用此布局无需更改您的代码。您唯一应该更新的是这些实体的命名空间:namespace AppBundle\Entity\Forum;

    【讨论】:

    • 这是一个很好的解决方案。我将如何在我的控制器中调用实体?我和$this->getDoctrine()->getRepository('AppBundle:News') 一样,但不是$this->getDoctrine()->getRepository('AppBundle:Forum:Category')?
    • 你是对的。简短的语法不能与我之前建议的第二种策略一起使用。您应该使用 ->getRepository('AppBundle\Entity\Forum\Category')`。所以我觉得毕竟还是用第一种策略比较好。
    • 我自己也经历过。您需要整个命名空间才能在控制器中获取实体。最好的方法是坚持您在答案中提供的第一个解决方案。
    【解决方案2】:

    是的,您需要为每个实体创建一个新文件。对于整个框架,您必须为每个文件只编写一个类,并且文件名必须与文件中的类名匹配(扩展名除外)。巨大的空间是什么意思?我们在 2015 年,计算机可以处理 TB 数据:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 2020-07-18
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      相关资源
      最近更新 更多