覆盖Composer自动加载器

时间:2013-05-21 17:31:10

标签: php autoload composer-php

背景

我正在开发一系列共享引擎的网站。与StackExchange的网站网络非常相似的东西。每个webiste都是一个单独的Symfony2安装在不同的Git存储库上,它依赖于引擎,引擎也放在一个单独的存储库中。

 "requires": {
     ...
     "my-platform/core": "dev-master"
 }

我还处于开发的早期阶段,所以每次我在核心存储库中更改内容时,我都不必使用composer update。似乎Composer有一个正确的工具来解决这个问题,但它不想正常工作。

我的目录结构:

Workspace
    MyPlatformCore
        src
            MyPlatform
                Core
                    SomeClass.php
        composer.json
    MyWebsiteAAA
        app
        src
        vendor
        web
        composer.json
    MyWebsiteBBB
        app
        src
        vendor
        web
        composer.json

每个composer.json存储库中MyWebsiteXXX的自动加载部分:

"autoload": {
    "psr-0": {
        "MyPlatform": "../MyPlatformCore/src"
    }
},

问题

如果我从php composer.phar dumpautoload --optimize运行MyWebsiteXXX,则会生成错误路径的自动加载器文件。文件vendor/composer/autoload_classmap.php包含:

'MyPlatform\\Core\\...' => $vendorDir . '/myplatform/core/src/MyPlatform/Core/...php',

虽然它应该包含:

'MyPlatform\\Core\\...' => $vendorDir . '/../MyPlatformCore/src/MyPlatform/Core/...php',

P.S。 Workspace\MyPlatformCore实际上是一个符号链接,但它应该重要,不是吗?

1 个答案:

答案 0 :(得分:0)

Composer不适合您当前的工作阶段。

为您的核心类提供可用的PSR-0自动加载器将使其可用于您的其他代码。将此自动加载器添加到Composer自动加载器应该可以工作,但我认为最好通过符号链接集成核心“代码进行中”,而不是不断地进行编写器更新。

真正的好处在于几个标记版本中的现有核心代码库,以及使用彼此不同的定义版本的多个网站。如果要添加功能或修复错误,您只能在核心上工作。日常工作将进入任何网站,其中可能包括在需要时更新此网站核心文件。