4

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

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

等等

为了使它工作,我的想法是创建目录“站点”,并为每个子域创建自己的目录,其中包含框架文件 + 供应商目录,其中包含指向根供应商/* 目录的符号链接(除了 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 文件)。

4

1 回答 1

3

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

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

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

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

$ composer dump-autoload --optimize

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

TLDR:使用单个composer.json类映射自动加载,它很快。

于 2012-08-30T23:31:50.543 回答