Symfony2 + Composer (multiple domains)



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

  • domain.com-主网站
  • help.domain.com-常见问题
  • 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,如果我稍后在任何目录上更新,库都会更新,但composer.lock文件不会同步,所以每次都会重新安装。

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

您要么有一个具有单个依赖项集的项目,要么有两个具有独立dep的项目。介于两者之间的任何事情都没有意义。似乎你想选择第一个选项,但又担心自动加载性能。

问题是,默认情况下,自动加载无论如何都会很慢。因此,即使您有两个单独的自动加载文件,其中只包括特定子项目的dep,它可能仍然很慢。

你真正应该做的是转储一个类映射,它基本上是一个自动加载文件,将所有类名映射到它们所在的文件。这可以减少stat调用,因此非常有效。在两个子项目中加载整个类映射也不应该给您带来太多开销,尤其是如果您启用了APC。

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

$ composer dump-autoload --optimize

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

TLDR:使用单个composer.json并自动加载类映射,速度很快

相关内容

  • 没有找到相关文章