为什么在 laravel 中需要在 composer.json 中指定 类

Why in laravel do you need to specify classes in composer.json

为什么在laravel中指定类在composer.json中?我认为 composer 是一个管理项目依赖项的程序,但它也用于映射控制器 类 等。这是为什么?

您不需要在 composer.json 中指定您的 classes。当然,如果您愿意,可以这样做,但在大多数情况下,没有必要这样做。

让我们来看看 Laravels 默认的 autoload 部分 composer.json

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ]
},

classmap 基本上意味着自动加载此处指定的所有内容。如果它是一个目录(如 "app/controllers"),它将加载文件夹中的所有 classes。 递归.

因此,仅仅因为您想将控制器移动到 app/controllers 中的子目录并不意味着您必须更改 composer.json

中的任何内容

不过你必须做一件事,运行 composer dump-autoload。你看,作曲家创建了一个文件,它存储 classes 和包含 class 的实际文件。您可以在 vendor/composer/autoload_classmap.php.

找到此文件

条目看起来像:

'IndexController' => $baseDir . '/app/controllers/IndexController.php

如果您现在将 IndexController.php 移动到 app/controllers/foo,应用程序仍会尝试从 app/controllers 开始包含它,直到您 运行 composer dump-autoload 这将重新生成 autoload_classmap.php.