如何通过保持WordPress命名约定来使用composer处理自动加载?

问题描述

我有点困惑,因为我正在使用composer为WordPress编程一个插件,因为这是真正的方法。

因此,我在插件和其他一些东西中创建了一个作曲家文件。在composer文件中,我添加了用于自动加载的名称空间:

"autoload": {
  "psr-4": {
    "Johnny\\Lolkick\\": [
      "includes/classes/"
    ]
  }
}

在我的班级文件夹中,我现在创建了一个名为class-main.php的班级。由于WordPress的命名约定,我决定使用此名称:

https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#naming-conventions

该类本身被命名为class Main {。现在,在基本插件文件中,我创建了一个新的失败的类实例。将文件名更改为Main.php后,它可以工作。

因此,WordPress命名约定最终破坏了composer的自动加载功能。我现在想知道您如何处理这个问题?我应该如何使用作曲家来保持命名约定?

解决方法

由于您的代码库与PSR-4 autoloading不兼容,因此您注意到,在composer.json的autoload部分中的psr-4映射将不起作用。

我想在这里您有两个选择:

第一个方法是改为使用classmap

{
    "autoload": {
        "classmap": ["includes/classes/"]
    }
}

这将简单地递归地解析该文件夹中的所有文件,并将类映射到它们的名称,而不管您采用哪种命名方案。

第二个是构建自己的自动加载器,并使用files使其自动加载:

{
    "autoload": {
        "files": ["includes/autoloader.php"]
    }
}

当引用给定的类名时,该自动加载器必须定义应该发生什么(应该加载哪个类)。

在两种情况下,请不要忘记之后再运行composer dump-autoload

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...