我是作曲家的新手,所以请耐心等待, 所以我有一个包,我从本地文件夹加载,并在使用它时,我收到以下错误:
致命错误:找不到类'mypkg \ Layer \ EasyCPT' 第5行的C:\ xampp \ htdocs \ testwp \ app \ Cpt \ location.php
My 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 App\Cpt;
use Mypkg\Layer\EasyCPT;
class Location extends EasyCPT{
protected $plural = 'locations';
}
主要自动加载文件:
require __DIR__.'/vendor/autoload.php';
use App\Init\EasyWP;
new EasyWP();
答案 0 :(得分:1)
您将命名空间用作:
use Particles\Layer\EasyCPT;
但在autoload
部分定义为:
"Mypkg\\": "particles/"
这不一致。
您应该使用正确的命名空间名称替换Mypkg
,例如
"autoload": {
"psr-4": {
"Particles\\": "particles/"
}
}
因此请求Particles\Layer\EasyCPT
命名空间将在particles/Layer/EasyCPT.php
文件中查找类。
根据Composer's PSR-4 documentation:
在
psr-4
键下,您可以定义从命名空间到路径的映射,相对于包根。自动加载像Foo\\Bar\\Baz
这样的类时,指向目录Foo\\
的名称空间前缀src/
意味着自动加载器将查找名为src/Bar/Baz.php
的文件并将其包括在内(如果存在)。请注意,与较旧的PSR-0
样式相反,文件路径中不存在前缀(Foo\\
)。
如果您的项目没有遵循PSR-4方法,请使用classmap来扫描您的所有类,例如
"autoload": {
"classmap": ["particles/"],
"exclude-from-classmap": ["/tests/"]
}
要手动重新生成autoload
,请运行:
composer dump-autoload -o
并检查vendor/composer/
中的自动加载文件是否正确生成了对类的引用。