【问题标题】:"Class not found" when trying to use composer auto load for a wordpress plugin尝试对 wordpress 插件使用作曲家自动加载时“找不到类”
【发布时间】:2019-07-25 14:05:35
【问题描述】:

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

目录结构:

  • 插件名称

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

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

找不到类“Foo\Class_Name”

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

【问题讨论】:

  • 我认为问题在于您在require 'vendor/autoload.php'; 之前执行use Foo\Class_Name;。尝试在use 之前执行require :)
  • 还是不行:/
  • 嗯,那可能是无法读取自动加载,试试把require 'vendor/autoload.php';换成require __DIR__ . '/vendor/autoload.php';
  • 解决了这个问题..谢谢!

标签: php wordpress composer-php


【解决方案1】:

需要 autoload.php 和 __DIR__:

来自

require 'vendor/autoload.php';

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

感谢Damian Dziaduch 的回答。

【讨论】:

    猜你喜欢
    • 2014-04-24
    • 2017-12-01
    • 2018-10-01
    • 2016-03-06
    • 2019-05-16
    • 2014-02-11
    • 2017-01-02
    相关资源
    最近更新 更多