作曲家自动加载PSR-4问题



我是作曲家的新手,所以请忍受我,因此,我有一个包裹,我从本地文件夹加载,在使用时,我会收到以下错误:

在 C: Xampp htdocs testwp app cpt cpt location.php在第5行 上

我的Composer.json:

"repositories": [
    {
        "type":"vcs",
        "url":"C:/xampp/htdocs/mypkg"
    }
],
"require": {
    "php": ">=7.0.0",
    "mypkg/particles": "master"
},
"autoload": {
    "psr-4": {
       "App\": "app/"
    }
}

软件包的作曲家:

"minimum-stability": "dev",
"authors": [
    {
        "name": "Talha Abrar",
        "email": "talha@themegeek.io"
    }
],
"autoload": {
    "psr-4": {
       "Mypkg\": "particles/"
    }
}

PSR 4:

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
    'Mypkg\' => array($vendorDir . '/Mypkg/particles/particles'),
    'App\' => array($baseDir . '/app'),
);

我的使用方式:

<?php 
namespace AppCpt;
use MypkgLayerEasyCPT;
class Location extends EasyCPT{
    protected $plural = 'locations';
}

主要自动加载文件:

require __DIR__.'/vendor/autoload.php';
use AppInitEasyWP;
    new EasyWP();

您使用名称空间为:

use ParticlesLayerEasyCPT;

但在autoload中定义为:

"Mypkg\": "particles/"

这是不一致的。

您应该用正确的名称名称替换Mypkg,例如

"autoload": {
    "psr-4": {
       "Particles\": "particles/"
    }
}

因此请求ParticlesLayerEasyCPT名称空间将在particles/Layer/EasyCPT.php文件中寻找类。

根据作曲家的PSR-4文档:

psr-4键下,您将映射从名称空间到路径的映射,相对于软件包根。当自动加载类似Foo\Bar\Baz的类时,指向目录src/的名称空间前缀Foo\意味着自动加载器将寻找一个名为 src/Bar/Baz.php的文件,并在存在时包含它。请注意,与较旧的PSR-0样式相反,文件路径中不存在前缀(Foo\)。

如果您的项目不遵循PSR-4方法,请使用ClassMap代替扫描所有类,例如

"autoload": {
    "classmap": ["particles/"],
    "exclude-from-classmap": ["/tests/"]
}

要手动再生autoload,运行:

composer dump-autoload -o

并在vendor/composer/中检查自动加载文件是否正确生成了对类的引用。

最新更新