【问题标题】:Override Composer autoloader覆盖 Composer 自动加载器
【发布时间】:2013-05-23 07:12:05
【问题描述】:

背景

我正在开发一系列共享一个通用引擎的网站。与 StackExchange 的网站网络非常相似。每个网站都是一个单独的 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

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

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

问题

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

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

虽然它应该包含:

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

附: Workspace\MyPlatformCore 实际上是一个符号链接,但它应该很重要,不是吗?

【问题讨论】:

    标签: php autoload composer-php


    【解决方案1】:

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

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

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

    【讨论】:

    • 我现在正试图通过符号链接集成我的“正在进行的代码”,但作曲家不想尊重我在composer.json 中的autoload 部分。
    猜你喜欢
    • 2017-09-02
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2021-03-18
    • 2013-02-17
    • 2020-01-21
    相关资源
    最近更新 更多