【问题标题】:Why in laravel do you need to specify classes in composer.json为什么在 laravel 中需要在 composer.json 中指定类
【发布时间】:2015-03-16 05:53:00
【问题描述】:

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

【问题讨论】:

  • 我认为您使用 composer / Laravel 错误。你能发布一些代码并进一步解释你在做什么吗?
  • 或者 composer 和 composer.json 是两个不同的东西?
  • 你没有。有自动映射器。
  • composer.json 是作曲家的配置

标签: laravel composer-php laravel-routing


【解决方案1】:

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

我们来看看Laravels默认composer.jsonautoload部分

"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 中的任何内容

你必须做一件事,运行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_classmap.php

【讨论】:

  • 好的,所以你告诉我 laravel 绝对依赖于 composer.json 来找到你的项目在哪里?其中包括控制器等?在什么情况下你会在 composer.json 中指定控制器?假设我不运行 composer dump-autoload,会发生什么?
  • 你看我来自codeigniter背景,codeigniter中没有composer.json或类似的文件/功能,所以很难理解为什么laravel依赖它......
  • 我还在试图理解为什么 composer.json 需要知道控制器类在哪里?我的意思是这不是路由到控制器的全部意义吗?
  • 首先,是的,Laravel 依赖于 composer 并将其用于包管理和自动加载。
  • i c...所以这就是它的工作原理:首先路由接收 uri,然后 laravel 内部检查它的 composer.json 文件以找到控制器等?
猜你喜欢
  • 2021-01-03
  • 2013-05-28
  • 2011-01-01
  • 1970-01-01
  • 2023-01-07
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
相关资源
最近更新 更多