【问题标题】:Symfony2 + Composer (multiple domains)Symfony2 + Composer(多域)
【发布时间】:2012-08-25 10:35:56
【问题描述】:

我们目前正在将我们的项目迁移到 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/

我需要这样做,因为每个域的自动加载都必须有所不同(我们将域之间共享的代码存储在 vendor/Company 中,并且每个域唯一的代码存储在 /src 文件夹中域目录)。

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

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

【问题讨论】:

    标签: symfony symfony-2.1 composer-php


    【解决方案1】:

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

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

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

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

    $ composer dump-autoload --optimize
    

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

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

    【讨论】:

    • 这听起来很合理,谢谢。附言我的解决方案确实看起来很奇怪。
    • "它将在vendor/composer/autoload_classmap.php 中创建文件。只需包含那个文件而不是vendor/autoload.php。"我们不应该还需要vendor/autoload.php吗?
    • @HalilÖzgür 你是对的。不知道我是否犯了错误,或者从那时起这在作曲家中是否发生了变化。我会更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 2013-10-02
    • 2014-10-13
    • 2012-12-30
    相关资源
    最近更新 更多