Composer classmap autoload不会在文件夹中加载新文件

pyx*_*yxl 22 autoload composer-php

以下问题:我在composer.json中定义了一个类映射:

"autoload": {
    "classmap": [
        "app/controllers",
        "app/models",
        "app/helper.php"
    ]   
}
Run Code Online (Sandbox Code Playgroud)

但是,当我在"controllers"或"models"文件夹中创建一个新文件时,它不会加载它们,而且我总是要编写一个composer dump-autoload.

这是正确的行为吗?我以为来自作曲家的自动加载器会监视文件夹中的新文件吗?

Sve*_*ven 25

是的,这是正确的行为.如果要自动加载新类,则必须使用PSR-0或PSR-4自动加载.

生成类映射需要Composer知道包含特定类的文件名.这只能通过解析目录中的整个源代码并扫描类,接口和特征定义来完成.

这通常是CPU和I/O密集型任务,因此只有在Composer安装/更新或(按需)转储自动加载器时才会执行此操作,而不是每次都完成require "vendor/autoload.php";.

请注意,类映射自动加载仅适用于未实现至少PSR-0的旧遗留代码库.它不适用于新代码 - 除非您想在开发过程中一次又一次地转储自动加载器的价格.


小智 9

通过SSH转到服务器的根目录.现在执行以下操作:

  1. 运行ls以列出所有文件.
  2. 你会看到composer.lock文件; 用rm composer.lock命令删除文件.
  3. 现在运行php composer update命令.

根据您的linux类型,您可能需要运行php-cli composer update.

第3步将创建一个新composer.lock文件,您的所有类将再次加载.在添加新类时随时执行此操作.

要么:

  1. 运行composer dump-autoload命令.