如何通过保持 WordPress 命名约定来处理 composer 的自动加载?
How to handle autoloading with composer by keeping the WordPress naming conventions?
我有点困惑,因为我正在使用 composer 为 WordPress 编写插件,因为这是真正的方法。
所以我在我的插件和其他一些东西中创建了一个作曲家文件。在作曲家文件中,我添加了用于自动加载的名称空间:
"autoload": {
"psr-4": {
"Johnny\Lolkick\": [
"includes/classes/"
]
}
}
在我的 classes 文件夹中,我现在创建了一个名为 class-main.php
的 class。由于 WordPress 命名约定,我决定使用这个名称:
https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#naming-conventions
class 本身被命名为 class Main {
。在我的基本插件文件中,我现在创建了一个失败的 class 的新实例。将文件名更改为 Main.php
后它起作用了。
因此 WordPress 命名约定破坏了 composer 的自动加载。我现在想知道你是如何处理这个问题的?我应该如何使用 composer 来保持命名约定?
由于您的代码库与 PSR-4 autoloading, a psr-4 映射不兼容,您 composer.json 的自动加载部分将无法工作,如您所见。
我会说你在这里有两个选择:
第一个是使用 classmap
代替:
{
"autoload": {
"classmap": ["includes/classes/"]
}
}
这将简单地递归地解析该文件夹中的所有文件,并将 classes 映射到它们的名称,无论您遵循什么命名方案。
第二个是构建您自己的自动加载器,并使用 files
使其自动加载:
{
"autoload": {
"files": ["includes/autoloader.php"]
}
}
当引用给定的 class 名称时,该自动加载器必须定义应该发生什么(应该加载或不加载哪个 class)。
在这两种情况下,不要忘记 运行 composer dump-autoload
之后。
我有点困惑,因为我正在使用 composer 为 WordPress 编写插件,因为这是真正的方法。
所以我在我的插件和其他一些东西中创建了一个作曲家文件。在作曲家文件中,我添加了用于自动加载的名称空间:
"autoload": {
"psr-4": {
"Johnny\Lolkick\": [
"includes/classes/"
]
}
}
在我的 classes 文件夹中,我现在创建了一个名为 class-main.php
的 class。由于 WordPress 命名约定,我决定使用这个名称:
https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#naming-conventions
class 本身被命名为 class Main {
。在我的基本插件文件中,我现在创建了一个失败的 class 的新实例。将文件名更改为 Main.php
后它起作用了。
因此 WordPress 命名约定破坏了 composer 的自动加载。我现在想知道你是如何处理这个问题的?我应该如何使用 composer 来保持命名约定?
由于您的代码库与 PSR-4 autoloading, a psr-4 映射不兼容,您 composer.json 的自动加载部分将无法工作,如您所见。
我会说你在这里有两个选择:
第一个是使用 classmap
代替:
{
"autoload": {
"classmap": ["includes/classes/"]
}
}
这将简单地递归地解析该文件夹中的所有文件,并将 classes 映射到它们的名称,无论您遵循什么命名方案。
第二个是构建您自己的自动加载器,并使用 files
使其自动加载:
{
"autoload": {
"files": ["includes/autoloader.php"]
}
}
当引用给定的 class 名称时,该自动加载器必须定义应该发生什么(应该加载或不加载哪个 class)。
在这两种情况下,不要忘记 运行 composer dump-autoload
之后。