2012-08-30 58 views
4

我们目前正在将我们的项目迁移到symfony2。该网站使用多个域名:Symfony2 +作曲家(多领域)

  • domain.com - 主站
  • help.domain.com - 常见问题
  • profile.domain.com - 用户CP

为了使它工作,我的想法是创建目录“网站”,并为每个子域创建自己的目录,其中有框架文件+供应商目录与符号链接到目录我n root 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/ 

我需要做这种方式,因为自动加载必须为每一个域名升技不同(我们存储在供应商/公司,以及代码域之间共享代码这是每个域独有的存储在域目录的/ src文件夹中)。

的问题是,现在我要做的“composer install”在每个目录和它会创建自己composer.lock,如果我在之后的任何目录的更新,该库将被更新,但composer.lock文件将不会同步,所以它会每次重新安装它。

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

回答

3

你要么有一个相关性集合或单独DEPS两个项目中的一个项目。之间的任何事情都没有意义。似乎你想要第一个选择,但担心自动载入性能。

的事情是,在默认情况下,自动加载将是缓慢的反正。因此,即使您有两个独立的自动加载文件,其中只包含特定子项目的代码,它仍然可能会很慢。

你真正应该做的是转储类地图,这基本上是一个映射所有的类名,他们居住在一个文件自动加载的文件,这样可以使统计召唤,因此是非常有效的。并且在两个子项目中加载整个类映射都不会给你太多的开销,特别是如果你启用了APC。

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

$ composer dump-autoload --optimize 

现在你应该得到更好的销售业绩自动加载。

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

+0

听起来很有道理,谢谢。附:我的解决方案确实看起来很奇怪。 – Anton

+0

“它会在'vendor/composer/autoload_classmap.php'中创建文件,只需要包含那个文件而不是'vendor/autoload.php'。”我们不应该还需要'vendor/autoload.php'吗? –

+0

@HalilÖzgür你是对的。不知道我是否犯了一个错误,或者自从那时起这个作曲家改变了。我会更新答案。 – igorw