无论我做什么,Composer自动加载均不起作用

时间:2019-10-08 11:50:26

标签: php composer-php psr-4

我有一个项目,并且需要一些软件包,因此我将项目重组为使用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';控制台中进行了php的操作,但这也不起作用。我检查了三重和四重路径,自动加载在那里。

“无效”是什么意思?自动加载要求成功。它允许我使用库。但是实际实例化会导致

  

找不到类错误。

不仅对于我在API命名空间中的类(它们在文件顶部被命名空间并且确切地位于它们应该位于的文件夹中),而且我也无法实例化Carbon。我可以 use Carbon\Carbon ,但是任何实例化尝试都将失败。

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

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

谢谢。

编辑:我尝试还原自动装带器,也尝试删除供应商文件夹并重新安装。全部无济于事。

编辑:也许值得一提,我将carbon降级为^ 1.21,因为carbon 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控制台中使用。我不确定该怎么解决。

1 个答案:

答案 0 :(得分:1)

您发现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文件并可能运行框架。