Symfony 2多个应用程序?

时间:2012-10-01 03:43:56

标签: symfony

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

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

我开始创建个人/应用程序目录,AppKernal.php文件和引导程序文件。这个问题的主要问题在另一个问题中有详细说明,但没有得到答案(不是我责怪任何TBH:D)。 Symfony2 multiple config and routing files for subdomain routing

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

关于PR的一次讨论,github在2.2版本中提供支持(我听说仍然是6mo) 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中的那个。似乎框架:router:config选项覆盖了其他配置文件中的先前用法,而不是扩展。

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

干杯

6 个答案:

答案 0 :(得分:12)

通过在多个内核中分割代码,可以实现多个应用程序项目。

然后你可以受益:

  • 多个网络根(对于不同的域有用)
  • 分享&特定配置(通过导入)
  • 捆绑包的清洁分离......

我在此处描述了整个过程:http://jolicode.com/blog/multiple-applications-with-symfony2您可以在此处找到示例分发:https://github.com/damienalexandre/symfony-standard

答案 1 :(得分:8)

对不起恶作剧......

我只想说我已经研究过Symfony2的多个应用程序结构。从版本2.4开始,当路由支持hostname based routing时,不需要多个应用程序。

您现在需要做的就是分开您的应用程序"进入不同的捆绑包,比如AcmeSiteBundleAcmeApiBundle,然后在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

答案 2 :(得分: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 }

答案 3 :(得分:0)

你可以尝试在github上找到一些东西。我发现以下Bundle应该这样做。 Imikay RouterBundle

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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