【问题标题】:How to handle autoloading with composer by keeping the WordPress naming conventions?如何通过保持 WordPress 命名约定来处理 composer 的自动加载?
【发布时间】:2020-12-01 15:17:23
【问题描述】:

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

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

"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 来保持命名约定?

【问题讨论】:

    标签: php wordpress plugins composer-php


    【解决方案1】:

    由于您的代码库与PSR-4 autoloading 不兼容,您的composer.json 的自动加载部分中的psr-4 映射将不起作用,正如您所注意到的。

    我想说你有两个选择:

    第一个是改用classmap

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

    这将简单地递归解析该文件夹中的所有文件并将类映射到它们的名称,无论您遵循什么命名方案。

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

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

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

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

    【讨论】:

    • @MrJo 这有帮助吗...?
    • 我今天试了一下,效果很好!非常感谢:)我休息了几天,很抱歉回复晚了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2020-07-22
    • 2020-07-13
    • 2014-09-12
    • 1970-01-01
    • 2014-05-02
    • 2014-10-25
    相关资源
    最近更新 更多