尝试对 WordPress 插件使用 Composer 自动加载时出现“找不到类”

Avi*_*y28 3 php wordpress composer-php

我正在编写一个插件并尝试使用作曲家自动加载我的类,但我无法让它工作。我知道关于这个话题有很多问题,但似乎没有什么对我有用。

目录结构:

  • 插件名称

      • 类名.php
    • 小贩
    • 插件名称.php
    • 作曲家.json
    • 作曲家.lock

composer.json文件:

{
    "require": {
        "katzgrau/klogger": "dev-master"
    },
    "autoload": {
        "psr-4": { "Foo\\": "classes" }
    }
}
Run Code Online (Sandbox Code Playgroud)

插件名称.php文件:

namespace Plugins_Main;

use Foo\Class_Name;

require 'vendor/autoload.php';

class Plugin_Name_Bootstrap{
    public static function run() {
        Class_Name::instance();
    }
 }
add_action('plugins_loaded', array('Plugins_Main\Plugin_Name_Bootstrap', 'run'));
Run Code Online (Sandbox Code Playgroud)

类名.php文件:

namespace Foo;

class Class_Name{
    protected static $_instance = null;

    public static function instance(){
        if ( self::$_instance === null ) {
            self::$_instance = new self();
        }

        return self::$_instance;
    }
}
Run Code Online (Sandbox Code Playgroud)

根据文档,这个自动加载应该可以工作,但我仍然得到

未找到类“Foo\Class_Name”

我想这可能与我试图在plugins_loaded钩子中初始化“Class_Name”这一事实有关,但是如果我更早地需要vendor/autoload.php,那为什么会很重要呢?

Avi*_*y28 5

需要 require autoload.php __DIR__

require 'vendor/autoload.php';
Run Code Online (Sandbox Code Playgroud)

require __DIR__  . '/vendor/autoload.php';
Run Code Online (Sandbox Code Playgroud)

感谢达米安·贾杜奇(Damian Dziaduch)的回答。