【问题标题】:Changing vendor directory can't find files anymore using Symfony 3.4使用 Symfony 3.4 更改供应商目录无法再找到文件
【发布时间】:2025-12-28 20:45:12
【问题描述】:

我正在尝试更改 Symfony 3.4 应用程序的依赖项目录。

我需要它,因为我正在使用 Docker 在 macOS 上工作,我宁愿不与主机共享它们,因为文件同步太慢了。

related documentation 说:

composer.json 中的变化如下所示:

{
    "config": {
        "bin-dir": "bin",
        "vendor-dir": "/some/dir/vendor"
    },
}

我做的

然后,更新app/autoload.php中autoload.php文件的路径:

// app/autoload.php

// ...
$loader = require '/some/dir/vendor/autoload.php';

我的app 目录中没有任何autoload.php 文件。
我在文档中遗漏了什么吗?

应用程序生成以下致命错误:

警告:需要(/some/dir/vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php):无法打开流:/vendor/composer 中没有这样的文件或目录/autoload_real.php 第 66 行

致命错误:require(): 无法打开所需的 '/some/dir/vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php' (include_path='.:/usr/ local/lib/php') 在 /vendor/composer/autoload_real.php 第 66 行

我最初使用以下方式创建应用程序:

$ composer create-project symfony/framework-standard-edition test "3.*"

【问题讨论】:

标签: php symfony composer-php


【解决方案1】:
  1. 在编辑器中打开您的 composer.json 文件。
  2. 查找“autoload-dev”部分
  3. 删除整个“文件”部分(如果存在)
  4. 保存文件
  5. 再次运行composer install
  6. 尽情享受派对吧。

示例代码:

"autoload-dev": {
    "psr-4": {
      "App\\Tests\\": "tests/"
    },
    "files": [
      "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php"
    ]
  },

【讨论】:

    【解决方案2】:

    在 Symfony 3.4 中,文件 app/autoload.php 已被删除,因此您应该:

    • 直接在web/app.phpweb/app_dev.php、bin/console 和var/SymfonyRequirements.php 文件中用新的供应商路径替换旧供应商路径
    • 重新运行命令$ composer install

    【讨论】:

    • 它一直有效,直到我从应用程序中删除了 vendor/ 目录,这意味着它没有使用新的 /vendor
    • 你也应该在 var/SymfonyRequirements.php 文件的第 567 和 568 行替换它
    • 在我从应用程序中删除供应商之前,我不明白它为什么会起作用(性能真的更好)
    • 您能否通过命令的输出来更深入地解决问题?
    【解决方案3】:

    我遇到了同样的问题,下一个解决了。

    遵循这 3 个步骤

    1.首先修改composer.json使用新的vendor路径:

    "config": {
        ...,
        "vendor-dir": "/app-vendor"
    },
    

    并删除下一行:

    "files": ["vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php"]
    

    2. 其次,如果您使用的是 docker-compose,请添加一个新卷,您将在其中放置您的供应商。

    volumes:
      ...
      - /app-vendor
    

    PD:/app-vendor 是一个挂载的卷,现在是空目录。

    3.最后,写require '/app-vendor/autoload.php';到:

    • my_project_name/bin/console
    • my_project_name/web/app.php
    • my_project_name/web/app_dev.php

    PD1:简单地说,这条线指向新的供应商路径。

    PD2:无需修改任何其他文件(如我所读的var/SymfonyRequirements.php)。

    检查您的更改

    一旦更改准备就绪,请移除 vendor/ 并移除容器以避免将来出现问题。

    启动您的新容器并执行composer install。现在,/vendor 将变为/app-vendor,不再位于项目的根文件夹中。

    有关更多详细信息,我建议您访问我的 docker-symfony 存储库并检查提交。您将看到基准测试进度和其他提示,例如缓存卷和非共享 /cache && /logs 文件夹。

    全部用于 Symfony 3.4。

    【讨论】: