gpt4 book ai didi

PHP - WordPress 插件命名空间中的 PSR-4 自动加载

转载 作者:行者123 更新时间:2023-12-04 16:59:53 34 4
gpt4 key购买 nike

我知道有人问过很多类似的问题,但我遵循了我能找到的每一个指南,但它仍然不适合我。我不知道这是否与它是 WordPress 插件有关,但自动加载器没有找到我的类。

在我的插件中,我遇到了很多类名冲突。我知道我可以用插件的名称作为每个类的前缀,但我觉得将整个项目放在特定的命名空间下会更容易/更清晰。我对 PHP 还是有点陌生​​,所以我可能认为这一切都错了,但我认为它应该可以工作。我知道还有其他方法可以使这项工作发挥作用,但我想了解为什么这不起作用。感谢您提供任何意见或帮助!

我得到的错误:

Fatal error: Class 'DistinguishedSites\Inc\Base\Activate' not found in /home/pluginte/public_html/wp-content/plugins/distinguished-sites/distinguished-sites-plugin.php on line 47

简化的目录结构:
/distinguished-sites
- distinguished-sites-plugin.php
- composer.json
- /vendor
- *All vendor files*
- /inc
- /Base
- Activate.php
*etc...*

Activate.php 文件:
<?php
/**
* @package DistinguishedSites
*/
namespace DistinguishedSites\Inc\Base;

class Activate
{

public static function activate() {
$db = new DatabaseApi();
$filter = new PostFilter;

$db->createTable();

$results = $filter->filterPosts();

flush_rewrite_rules();
}
}

我正在尝试在我的 distinct-sites-plugin.php 文件中使用 Activate 类:
<?php
/**
* @package DistinguishedSites
*/

use \DistinguishedSites\Inc\Base\Activate;

defined( 'ABSPATH' ) or die( 'Hey, what are you doing here? You silly human!' );

// Require autoload file.
if ( file_exists( dirname( __FILE__ ) . '/vendor/autoload.php' ) ) {
require_once dirname( __FILE__ ) . '/vendor/autoload.php';
}

define( 'PLUGIN_PATH', plugin_dir_path( __FILE__ ));
define( 'PLUGIN_URL', plugin_dir_url( __FILE__ ));
define( 'PLUGIN', plugin_basename( __FILE__ ));

// Runs on plugin activation.
function activate_distinguished_sites_plugin() {
Activate::activate();
}
register_activation_hook( __FILE__, 'activate_distinguished_sites_plugin');

// Runs of plugin deactivation.
function deactivate_distinguished_sites_plugin() {
//Deactivate::deactivate();
}
register_deactivation_hook( __FILE__, 'deactivate_distinguished_sites_plugin');


// Initialize core classes of the plugin.
if ( class_exists( 'DistinguishedSites\Init' ) ) {
Init::register_services();
}

composer.json 文件:
{
"name": "sno/distinguished-sites",
"description": "Distinguished sites badge submission plugin.",
"type": "project",
"license": "GPL",
"authors": [
{
"name": "noah",
"email": "noah.seichter@snosites.com"
}
],
"minimum-stability": "dev",
"require": {},
"autoload": {
"psr-4": {
"DistinguishedSites\\": "."
}
}
}

autoload_psr4.php 文件:
<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
'DistinguishedSites\\' => array($baseDir . '/'),
);

最佳答案

PSR-4 自动加载器区分大小写,因此您应该将 Inc/ 大写目录,或在命名空间中使用小写。

The subdirectory name MUST match the case of the sub-namespace names.



https://www.php-fig.org/psr/psr-4/

关于PHP - WordPress 插件命名空间中的 PSR-4 自动加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52633505/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com