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

为什么在laravel中需要在composer.json中指定类,laravel,composer-php,laravel-routing,Laravel,Composer Php,Laravel Routing,为什么在laravel中要在composer.json中指定类?我认为composer是一个管理项目依赖项的程序,但它也用于映射控制器类。为什么会这样?您不需要在composer.json中指定类。当然,如果你愿意,你可以这样做,但在大多数情况下,没有必要这样做 让我们看一下Laravels defaultcomposer.json "autoload": { "classmap": [ "app/commands", "app/controllers",

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

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

让我们看一下Laravels default
composer.json

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ]
},
classmap
基本上意味着自动加载此处指定的所有内容。如果它是一个目录(如
“app/controllers”
),它将加载文件夹中的所有类递归地

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

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ]
},
不过,您必须做一件事,运行
composer dump autoload
。您知道,composer创建了一个文件,在其中存储类和包含类的实际文件。您可以在
vendor/composer/autoload_classmap.php
上找到此文件

条目如下所示:

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

如果您现在将
IndexController.php
移动到
app/controllers/foo
中,应用程序仍将尝试从
app/controllers
中包含它,直到您运行
composer dump autoload
将重新生成
autoload\u classmap.php
,我认为您使用composer/Laravel是错误的。你能发布一些代码并进一步解释你在做什么吗?或者composer和composer.json是两个不同的东西吗?你不知道。有自动映射器。
composer.json
是composer的一种配置,例如,请回答以下问题:好的,您告诉我laravel完全取决于composer.json来查找项目中的内容?其中包括控制器等。?在什么情况下,您会在composer.json中指定控制器?假设我不运行composer dump autoload,会发生什么?你看,我来自codeigniter的背景,codeigniter中没有composer.json或类似的文件/功能,所以很难理解为什么laravel依赖于它…我仍然试图理解为什么composer.json需要知道控制器类在哪里?我的意思是,这不是路由到控制器的全部要点吗?首先,是的,Laravel依赖于composer,并将其用于包管理和自动加载。I c…那么它就是这样工作的:首先路由接收uri,然后在内部Laravel检查其composer.json文件以查找控制器等?