繁体   English   中英

无论我做什么,作曲家自动加载都不起作用

[英]Composer autoload doesn't work regardless of whatever I do

我有一个项目,我需要一些包,所以我重新组织了项目以使用PSR-4

这是我的composer.json

{
    "name": "me/production",
    "type": "project",
    "authors": [
        {
            "name": "Me",
            "email": "me@me.com"
        }
    ],

    "config": {
        "platform": {
            "php": "5.6.1"
        }
    },
    "autoload": {
      "psr-4": {
        "API\\": "api/"
      }
    },

    "require": {
        "nesbot/carbon": "^2.25"
    },

}

它在我的脚本中不起作用。 但是,真正的关键是:我确实需要require_once __DIR__. '/vendor/autoload.php'; require_once __DIR__. '/vendor/autoload.php'; 在我的php控制台中,它也不起作用。 我已经三重和四重检查了路径,自动加载在那里。

我所说的“不起作用”是什么意思? 自动加载需要成功。 它允许我使用库。 但是实际的实例化会导致

Class 未找到错误。

不仅对于我在API命名空间中的类,这些命名空间位于文件顶部,并且恰好位于它们应该在的文件夹中,而且我也不能实例化 Carbon。 我可以use Carbon\Carbon但任何实例化尝试都会失败。

有趣的是,直接实例化\Carbon\Carbon不会失败。

这是怎么回事? 这很奇怪。

先感谢您。

编辑:我尝试减少自动加载器,我还尝试删除供应商文件夹并重新安装。 一切都无济于事。

编辑:可能值得一提的是,我将碳降级为 ^1.21,因为碳 2 不支持 php 5.6。 但它仍然不起作用。

编辑:它也发生在我的 API 命名空间中,这是一个使用我的 Instagram API 实现的示例:

 use \API\Insta;
php > var_dump(new Insta);
PHP Fatal error:  Class 'Insta' not found in php shell code on line 1
php > var_dump(new \API\Insta);
object(API\Insta)#3 (1) {
  ["ig_token"]=>
  string(51) "A_VALID_TOKEN"
}
php > 

编辑:问题自己解决了,它现在已经变成了一个我不太关心的问题:我可以使用所有东西,但不能在 php 控制台中使用。 我不确定是什么修复了它。

如您所见,nesbot/carbon,2.25 版至少需要 PHP v7.1.8。

use语句不会检查任何内容,而是创建一个可以使用的本地别名。 如果您尝试使用不存在的东西,那么它只会失败。

请澄清您具有以下目录结构:

  • ./composer.json
  • ./composer.lock
  • ./Api/Insta.php

在文件 Api/Insta.php 中:

namespace API;  // this is your top namespace name
use Carbon/Carbon; // etc
class Insta { ... }

命名空间与目录名称不同可能会导致混淆。

还会有 index.php/front-controller 引入 vendor/autoload.php 文件并可能运行框架。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM