php - "Class not found"尝试对 WordPress 插件使用 Composer 自动加载时

标签 php wordpress composer-php

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

目录结构:

  • 插件名称

    • 类(class)
      • 类名.php
    • 供应商
    • 插件名称.php
    • composer.json
    • composer.lock

composer.json 文件:

{
    "require": {
        "katzgrau/klogger": "dev-master"
    },
    "autoload": {
        "psr-4": { "Foo\\": "classes" }
    }
}

plugin-name.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'));

Class_Name.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;
    }
}

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

Class 'Foo\Class_Name' not found

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

最佳答案

需要使用 __DIR__ 要求 autoload.php:

来自

require 'vendor/autoload.php';

require __DIR__  . '/vendor/autoload.php';

谢谢Damian Dziaduch来寻找答案。

关于php - "Class not found"尝试对 WordPress 插件使用 Composer 自动加载时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54980221/

相关文章:

php - 当数据输入不一致时如何查找记录?

wordpress - 在 WordPress 页面 URL 中添加动态前缀

mysql - 在不丢失帖子的情况下更改帖子类型的名称

php - 找不到 composer phpunit psr-4 自动加载类

php - 如何将它从 PHP 转换为 JavaScript?

php - 为什么这个 if 语句总是运行?

php - Laravel Valet 不工作——好像它缺少网络服务器

javascript - HLS 视频在 chrome 上不可见 |视频.js

php - 尝试在 OSX 10.9 上安装 Composer

git - Composer PHP 在父包 src 文件夹中安装一个包