[英]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
语句不会检查任何内容,而是创建一个可以使用的本地别名。 如果您尝试使用不存在的东西,那么它只会失败。
请澄清您具有以下目录结构:
在文件 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.