Composer自动加载文件,每次都不运行命令

时间:2017-02-24 16:36:44

标签: php composer-php

这是一个普遍的问题,我出于好奇,可能会在我的项目中产生一些有用的东西。

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

在我用其内容创建文件后,是否可以让作曲家自动查看文件?

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

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

composer.json autoload:

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

2 个答案:

答案 0 :(得分:1)

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

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

运行composer update后,自动装带器将知道脚本遇到自动命名空间的命名空间时的位置,而无需编写任何其他命令。

在命名和创建类时,您必须尊重文件层次结构和psr-4。在上面的示例中,添加App\Controller\MyController类非常简单,您可以将其添加到Controller文件夹中,并在下次运行时自动加载。

/src
  /Controller
    MyController.php
  /Model
    /Mappers
      MyMapper.php
  simpleFunctions.php
namespace App\Controller;
class MyController {}

套管很重要!

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

答案 1 :(得分:-2)

基本上,Composer不知道您正在创建的文件,您必须运行不会下载任何新内容的dump-autoload command。它只是重新生成需要包含在项目中的所有类的列表(autoload_classmap.php)。非常适合在项目中安装新课程。

理想情况下,我们执行composer dump-autoload -o,以加快网页的加载速度。它不是默认的唯一原因是因为它需要更长的时间来生成(但只是略微明显)