【问题标题】:Class not found using custom composer package使用自定义作曲家包找不到类
【发布时间】:2021-10-20 03:26:57
【问题描述】:

我已经创建了一个自定义的 comoposer 包,我想通过这个 composer.json 在我的项目中使用它:

{
    "name": "papillon/test",
    "type": "library",
    "version": "dev-master",
    "require": {
        "php": "^7.1.11"
    },
    "autoload": {
        "psr-4": {
            "Papillon\\Fountaine\\Eau\\": "src/Papillon/Fountaine/Eau/"
        }
    }  
}

我用 zip 压缩它。在主项目中,我添加了一个名为 repo 的文件夹,我在其中添加了 de composer package zip。然后,我像这样修改主项目的composer.json:

{
    "repositories": [
        {
            "type": "artifact",
            "url": "var/main/repo"
        }
    ],
    "require": {
        "papillon/test": "dev-master"
    }
    
}

我执行 composer update 并将包添加到 vendor 文件夹;一切似乎进展顺利......但如果我想用这个脚本测试主项目中的包:

<?php

require (__DIR__ . '/vendor/autoload.php');
use Papillon\Fountaine\Eau\FlowerClass;

echo FlowerClass::bloom();

它返回:PHP 致命错误:未捕获的错误:在 .../test_package.php:6 中找不到类“Papillon\Fountaine\Eau\FlowerClass” 堆栈跟踪: #0 {主要} 在第 6 行抛出 .../test_package.php

我认为主项目可能无法识别该包;可能这个包没有正确安装在主项目中?

【问题讨论】:

  • 你使用 xdebug 吗?我发现设置断点并单步执行 Composer 自动加载器对于查找自动加载问题非常有用。
  • 您尝试过什么来解决问题?你被困在哪里了?你能在vendor 文件夹中找到那个文件吗?
  • 我调试了作曲家自动加载添加断点,我发现在自动加载包路由路径中有一个小写名称而不是大写的文件夹,因为它是在包的 composer.json 中定义的。谢谢。

标签: php composer-php


【解决方案1】:

调试自动加载对于捕获错误非常有用。请注意路由路径,当在包 composer.json 中使用该文件夹大写定义路由时,自动加载会尝试在具有小写文件夹的路径中查找类文件。

【讨论】:

    猜你喜欢
    • 2015-02-02
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 2018-10-01
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多