Symfony2 + Composer(多个域名)

4
我们目前正在将项目迁移到Symfony2。该网站使用多个域名:
- `domain.com` - 主要网站 - `help.domain.com` - FAQ - `profile.domain.com` - 用户控制面板
等等
我的想法是创建一个名为“sites”的目录,并为每个子域创建自己的目录,在其中拥有框架文件和供应商目录,该目录中包含指向根目录`vendor/*` 中目录的符号链接(除了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/

我需要这样做,因为每个域名的autoload必须略有不同(我们将在vendor/Company中存储在不同域名之间共享的代码,而将在域目录的/src文件夹中存储每个域独特的代码)。

问题是现在我必须在每个目录中执行"composer install",它会创建自己的composer.lock文件,如果我稍后在任何一个目录中进行更新,库将被更新,但composer.lock文件将不会同步,因此它每次都会重新安装。

有没有更好的方法来解决这个问题?(我考虑将composer仅放在根目录下,但我没有找到一种方法来为每个域名生成不同的autoload.php文件)。

1个回答

3
你可以选择使用一个带有单一依赖项集的项目或两个具有独立依赖项的项目。中间任何情况都没有意义。看起来你想采用第一种选项,但对自动加载性能存在顾虑。
问题在于,默认情况下,自动加载本身就很慢。因此,即使你有两个分别包含特定子项目依赖项的自动加载文件,它们可能仍然非常慢。
你真正应该做的是转储类映射表,这基本上是一个将所有类名映射到它们所在文件的自动加载文件。这样可以减少状态调用,因此非常高效。在两个子项目中加载整个类映射表也不会给你太多额外负担,特别是如果启用了APC。
你可以使用以下命令转储类映射表文件:
$ composer dump-autoload --optimize

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

简而言之:使用单个composer.json文件进行类映射自动加载,速度非常快。


听起来很合理,谢谢。顺便说一句,我的解决方案确实看起来很奇怪。 - Anton
它将在 vendor/composer/autoload_classmap.php 中创建文件。只需包含该文件,而不是 vendor/autoload.php 即可。我们仍然需要 vendor/autoload.php 吗? - Halil Özgür
@HalilÖzgür 你说得没错。不确定是我犯了错误,还是Composer自那时起就有了变化。我会更新答案的。 - igorw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接