11

这似乎是与 Symfony2 相关的最可怕的话题,因为经过一周的搜索和测试,我仍然无法找到答案。

简而言之,我正在构建一个包含多个子域的应用程序,我希望为所有子域使用不同的配置,同时从 /src 共享多个捆绑包,更重要的是,导入中央配置和路由(以及每个应用程序自己的)

我走上了创建单独的 /app 目录、AppKernal.php 文件和引导文件的道路。这个主要问题在另一个问题中有详细说明,该问题没有收到任何答案(不是我责怪任何人 TBH :D)。 Symfony2 用于子域路由的多个配置和路由文件

我找到了关于此事的讨论,Fabian 甚至参与了这个: https ://groups.google.com/forum/?fromgroups=#!topic/symfony-devs/yneojUuFiqw

这个讨论是关于 github 的 PR 以在 2.2 版中提供支持(我听说还有 6 个月) https://github.com/symfony/symfony/pull/3378

有没有人以前做过这个?这个过程是否容易解释?是否有任何信息可以帮助解决这个问题?

我几乎处于看起来这根本不可能的阶段。对于像 Symfony 这样被吹捧的系统,我觉得这真的很奇怪,尤其是当 Symfony1.4 似乎很容易做到这一点时。

更新

感谢您的回复。挑战在于,有一个配置层次结构。这些配置依次导入自己的 routing.yml 文件。

例如:域http://testing.api.mydomain.com将包括以下配置:

config_api.yml -> config_testing.yml -> config_dev.yml -> config.yml

都导入自己的 routing.yml 文件。但是只加载了 config_api.yml 中的那个。似乎框架:路由器:配置选项覆盖了其他配置文件中以前的用法,而不是扩展。

平心而论,应用程序代码的位置无关紧要。具有分层路由的分层配置似乎是问题。

干杯

4

6 回答 6

12

Multiple applications projects can be achieved by splitting your code in multiple Kernels.

You can then benefit:

  • multiple web roots (useful for differents domains)
  • shared & specific config (via imports)
  • clean separation of Bundles...

I have described the whole process here: http://jolicode.com/blog/multiple-applications-with-symfony2 and you can find an example distribution here: https://github.com/damienalexandre/symfony-standard

于 2013-03-08T10:58:56.617 回答
8

抱歉弄坏了...

我只想说我也研究了 Symfony2 的多个应用程序结构。从 2.4 版本开始,当路由支持基于主机名的路由时,不再需要多个应用程序。

你现在需要做的就是将你的“应用程序”分成不同的包,比如AcmeSiteBundleand AcmeApiBundle,然后在app/config/routing.yml

acme_site:
    host:     "www.{domain}"
    resource: "@AcmeSiteBundle/Resources/config/routing.yml"
    prefix:   /
    defaults:
        domain: "%domain%"
    requirements:
        domain: "%domain%"

acme_api:
    host:     "api.{domain}"
    resource: "@AcmeApiBundle/Resources/config/routing.yml"
    prefix:   /
    defaults:
        domain: "%domain%"
    requirements:
        domain: "%domain%"

记得domain设置参数app/config/parameters.yml

parameters:
    .....
    domain: example.com
于 2014-06-13T17:36:43.200 回答
5

您可以使用 testing/Dev 示例创建不同的配置:

第 1 步 创建与子域一样多的 web/app.php 文件。

web/app_subdomainx.php

第 2 步 在每个 app_subdomain_X.php 文件中更改配置:

$kernel = new AppKernel('subdomainx', false);

步骤 3 创建与您的环境匹配的配置文件

config_subdomainx.yml
security_subdomainx.yml

第4步

通过访问您的特定域

/web/app_subdomainx.php

PS:

保留 config.yml 用于通用配置(如数据库连接)并将 config.yml 包含到 config_subdomainx.yml

imports:
    - { resource: config.yml }
于 2012-10-01T10:55:28.750 回答
0

也许你可以试试这个包,它在同一个应用程序和数据库上处理多个域网站: https ://github.com/AppVentus/MultiDomainBundle 。

于 2013-06-26T08:43:46.823 回答
0

基本上 Fabien 是对的,没有理由拥有多个应用程序,如果您真的需要不同的应用程序,它可能是一个不同的项目。捆绑包和库可以像您在网络上看到的任何其他捆绑包一样轻松共享。然后,您可以在每个项目的应用程序部分中拥有属于您称为“应用程序”的每个东西的一小部分设置。如果他们共享整个代码,那么这只是每个子域的配置层次结构的问题,考虑到您想要共享配置的某些部分,这可能是您的情况。

Symfony 有很多方法可以让你重新利用非常好的代码,但是这个框架并不意味着有很多应用程序,如果你想尝试破解它,继续,但是你不再使用这个框架了。这就是为什么你找不到例子,不是因为它很可怕,它不会那么难修改,它只是很难看,IMO。

于 2012-10-02T15:03:48.680 回答
0

您可以尝试在 github 上找到一些东西。我找到了以下应该执行此操作的 Bundle。Imikay RouterBundle

于 2012-10-01T09:55:37.490 回答