Symfony2 + Composer(多个域)

时间:2012-08-30 16:19:26

标签: symfony symfony-2.1 composer-php

我们目前正在将项目迁移到symfony2。该网站使用多个域名:

  • domain.com - 主要网站
  • help.domain.com - faq
  • profile.domain.com - 对于用户CP

等等

为了使它工作,我的想法是创建目录'sites',并为每个子域创建自己的目录,其中它有框架文件+供应商目录,符号链接到根供应商/ *中的目录(除了composer和autoload.php之外的每个目录)文件)。 所以结构看起来像这样:

root/
    sites/
        domain.com/
            app/
            src/
            web/
            vendor/
                symlinks for each library to root vendor
            composer.json
            composer.lock
        profile.domain.com/
            app/
            src/
            web/
            vendor/
                symlinks for each library to root vendor
            composer.json
            composer.lock
    vendor/

我需要这样做,因为每个域的自动加载必须是不同的(我们存储供应商/公司中的域之间共享的代码,并且每个域的唯一代码存储在/ src文件夹中域目录)。

问题是,现在我必须在每个目录上执行“composer install”并创建自己的composer.lock,如果我稍后在任何目录更新,则会更新lib,但是composer.lock个文件不会被同步,因此每次都会重新安装。

有没有更好的方法来解决这个问题? (我想把作曲家只放在root目录下,但我找不到为每个域转储不同autoload.php文件的方法。)

1 个答案:

答案 0 :(得分:3)

您要么拥有一个具有一组依赖项的项目,要么拥有两个具有单独deps的项目。介于两者之间的任何事情都没有意义。看起来您想要使用第一个选项,但担心自动加载性能。

事情是,默认情况下,自动加载会很慢。所以即使你有两个单独的自动加载文件,只包括特定子项目的deps,它可能仍然会很慢。

你真正应该做的是转储一个类映射,它基本上是一个自动加载文件,它将所有类名映射到它们所在的文件。这样可以保持统计调用,从而非常有效。在两个子项目中加载整个类映射也不应该给你带来太多开销,特别是如果你启用了APC。

您可以使用以下命令转储类映射文件:

$ composer dump-autoload --optimize

现在您应该获得更高的自动加载性能。

TLDR:使用单个composer.json进行类地图自动加载,速度很快。