Composer 自动加载文件,每次无需 运行 命令

Composer autoload files without running a command each time

这是我出于好奇而提出的一个普遍问题,可能会对我的项目有所帮助。

每次添加新文件(例如新控制器或模型)时,我都必须 运行 composer dump-autoload -o 才能包含该文件,不确定我是否只是在做某事错了或者它是这样工作的。

在我创建文件及其内容后,是否可以让 composer 自动查看该文件?

我的第一个想法是在一个特殊的 "refresh" 文件中为 运行 命令创建一个脚本,但这似乎是一种浪费。

我正在使用 PSR-4 加载我的文件。

composer.json 自动加载:

    "autoload":{
    "psr-4":{
        "Website\":"app"
    }
},

基本上,Composer 不知道您正在创建的文件,您必须 运行 dump-autoload command,这不会下载任何新内容。它只是重新生成需要包含在项目中的所有 classes 的列表 (autoload_classmap.php)。当您的项目中有一个新的 class 时的理想选择。

理想情况下,我们执行 composer dump-autoload -o ,以更快地加载您的网页。它不是默认值的唯一原因是生成它需要更长的时间(但只是稍微引人注目)

您需要配置 composer.json 文件,以便自动加载器知道在哪里寻找特定的命名空间:

"autoload": {
  "psr-4": {
    "App\": "src/"
  },
  "files": [
    "src/simpleFunctions.php"
  ]
}

在 运行 宁 composer update 之后,当脚本遇到属于这些定义的名称空间时,自动加载器将知道去哪里查找,而无需编写任何进一步的命令。


在命名和创建 classes 时,您必须尊重文件层次结构和 psr-4。在上面的示例中,添加 App\Controller\MyController class 很简单,您将其添加到 Controller 文件夹中,它将在您的下一个 运行.

中自动加载
/src
  /Controller
    MyController.php
  /Model
    /Mappers
      MyMapper.php
  simpleFunctions.php

namespace App\Controller;
class MyController {}

大小写很重要!

当看到像 Website\Controllers 这样的命名空间时,自动加载器将在指定命名空间的根目录下查找具有相同大小写的文件。这意味着,如果您处于区分大小写的系统(如 Linux 发行版)下,您实际上需要尊重大小写。在你的情况下 class Website\Controllers\Front 必须 app/Website/Controllers/Front.php.