【问题标题】:Composer Autoload psr-4 issueComposer 自动加载 psr-4 问题
【发布时间】:2017-11-21 14:02:53
【问题描述】:

我是作曲家的新手,所以请耐心等待, 所以我有一个包,我从本地文件夹加载它,在使用它时,我收到以下错误:

致命错误:类 'mypkg\Layer\EasyCPT' 未在 C:\xampp\htdocs\testwp\app\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/"
    }
}

第 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();

【问题讨论】:

  • 在你的根项目中尝试composer dump-autoload
  • 试了很多次,还是不行

标签: php composer-php autoload


【解决方案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/ 中的自动加载文件是否正确生成了对类的引用。

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 2014-03-24
    • 2014-07-25
    • 2015-04-20
    • 2014-08-12
    • 2014-11-01
    • 2018-06-01
    • 2017-02-01
    • 2017-09-15
    相关资源
    最近更新 更多