【问题标题】:How to structure of a Symfony 2 application to support multiple applications?如何构建 Symfony 2 应用程序以支持多个应用程序?
【发布时间】:2014-01-14 03:00:14
【问题描述】:

背景

我们计划将当前代码迁移到 Symfony2 项目。

在我们的案例中,每个应用程序都被视为我们运营所在的国家/地区。因此:

  • 每个应用程序都有一个唯一的顶级域。
  • 每个应用程序都有相同的子域。
  • 每个应用程序都有自己的数据库。每个应用程序的数据库结构都是相同的。
  • 应用程序将共享相同的业务逻辑。业务逻辑上的任何差异都会被抽象到一个配置文件中。应该有一个基础配置文件,应用程序可以使用特定于应用程序的配置覆盖该文件。
  • 应用程序将共享大部分模板,但也可能有特定于应用程序的模板。

可能的方法

  1. 多个回购
    • 每个应用程序本身就是一个 Symfony2 项目。
    • 所有开发都将在包中进行,每个应用程序都通过 composer 加载相同的包。
    • 这种方法会使开发变得相当麻烦。理想情况下,我想在不运行作曲家等的情况下测试所有国家/地区的任何更改。
  2. 具有多个内核的单个存储库中的多个应用
    • 每个应用程序在app/ 文件夹中都有自己的应用程序,如here 中所建议的那样。
    • 复制整个应用程序文件夹似乎有点骇人听闻。不确定这是否是推荐做法?
  3. 修改 Symfony2 以支持多种应用程序
    • 修改 Symfony2 Kernel/Console/Whatever 以支持多个应用程序。
    • 是否有任何现有的捆绑包/示例已经这样做了?
  4. [您的想法]
    • 还有其他可能的方法吗?

问题

在 Symfony2 中添加对多个应用程序的支持的最佳方法是什么?

【问题讨论】:

    标签: symfony


    【解决方案1】:
    1. 这是一个很好的方法,但如果您发现您共享大量代码...

    2. Symfony2 的创建者不推荐这种做法。如果您需要多个内核,您很可能需要多个项目。 https://groups.google.com/d/msg/symfony-devs/yneojUuFiqw/sZ8BZrzFLbwJ

    3. IDK

    4. 对于我构建的项目,更改来自 $_GET 参数。我所做的是,我有一个主要的项目包,它处理常见的功能并引用应用程序/视图的基本布局。在“核心”功能中,我创建了一个控制器并将其用作服务,以便我所有特定于应用程序的捆绑软件都可以在任何时候使用它。然后我为每个应用程序特定的配置定义创建一个 Symfony2 扩展,这样每个应用程序都可以有 yml 配置,同时在 app/config/config.yml 中保留高级配置。这样做的一个优点是,在 CoreBundle 的控制器中,我可以创建通用页面路由并呈现如下:

      $this->render('Name'.$project.'Bundle:index.html.twig', array('params' => $params));

    【讨论】:

    • 感谢您的想法。我们决定采用您的方法。我们的配置当前驻留在我们的包中。然后扩展程序根据国家/地区(即应用程序)决定加载哪个配置。我们必须修改 AppKernel 和控制台以了解多个应用程序。
    猜你喜欢
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多