【问题标题】:Symfony2 architectureSymfony2 架构
【发布时间】:2015-10-01 01:00:15
【问题描述】:

我正在使用 Symfony2 开发一个应用程序,它有 3 个主要部分,分别称为前台、后台和管理员。我正在考虑创建三个单独的包:FrontOfficeBundle、BackOfficeBundle、AdminBundle,但 Symfony 的文档说,每个包之间不应该有任何关系。实体已经是共享属性,并且可能是某些模型。我可以创建一个 SharedBundle 但它没有意义。我记得 2 年前我创建了一个应用程序,当时我有 15 个捆绑包并且都相互连接,我从经验中知道这是一场噩梦。

我是否应该在文件夹中只包含一个捆绑 AppBundle 和逻辑拆分,例如。控制器/管理员;控制器/前台、控制器/后台?

最好的方法是什么?

【问题讨论】:

  • 是的,您的应用程序逻辑应该只有一个 AppBundle。
  • 您最好先阅读最佳实践。 symfony.com/doc/current/best_practices/…
  • 那些最佳实践宣传服务定位器反模式。这意味着您的控制器可以访问整个服务容器,而不仅仅是它真正需要的。如果您改用依赖注入,您将获得更好的可测试性,并且作为奖励,给定控制器的依赖关系在其构造函数中可见。

标签: php symfony architecture


【解决方案1】:

都是关于SRPDRY

创建一个捆绑包并没有什么坏处,因此为您在多个捆绑包中需要的东西制作一个单独的捆绑包,例如我倾向于创建一个包含实体及其存储库(作为服务)的 EntityBundle。

当然,您也可以只使用单个 AppBundle,但不要将您的逻辑放入控制器中 -> 创建可重用的服务!将您需要的服务注入您的控制器(它们本身也应该是服务)。

Alternatives to base Controller Methods

【讨论】:

    【解决方案2】:

    没有最好的方法。

    但是,我喜欢为每个请求操作创建一个“组件”目录,而不是按目录中的类类型(控制器、命令、表单、模板)进行分组。所以我会有

    Action
      FrontOffice
      BackOffics
      Admin
        User
          UserController.php
          UserFormType.php
          UserTemplate.html.twig
    

    以这种方式对文件进行分组确实减少了找出各种文件所在的位置。这是“最好”的方法吗?没有。但它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 2012-06-01
      • 2013-02-27
      相关资源
      最近更新 更多