我们目前正在将项目迁移到symfony2。该网站使用多个域名:
domain.com
- 主要网站help.domain.com
- faq 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
,如果我稍后在任何目录更新,则会更新lib,但是composer.lock
个文件不会被同步,因此每次都会重新安装。
有没有更好的方法来解决这个问题? (我想把作曲家只放在root目录下,但我找不到为每个域转储不同autoload.php文件的方法。)
答案 0 :(得分:3)
您要么拥有一个具有一组依赖项的项目,要么拥有两个具有单独deps的项目。介于两者之间的任何事情都没有意义。看起来您想要使用第一个选项,但担心自动加载性能。
事情是,默认情况下,自动加载会很慢。所以即使你有两个单独的自动加载文件,只包括特定子项目的deps,它可能仍然会很慢。
你真正应该做的是转储一个类映射,它基本上是一个自动加载文件,它将所有类名映射到它们所在的文件。这样可以保持统计调用,从而非常有效。在两个子项目中加载整个类映射也不应该给你带来太多开销,特别是如果你启用了APC。
您可以使用以下命令转储类映射文件:
$ composer dump-autoload --optimize
现在您应该获得更高的自动加载性能。
TLDR:使用单个composer.json
进行类地图自动加载,速度很快。