无论我做什么,作曲家自动加载都不起作用
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"
},
}
它在我的脚本中不起作用。但是,真正的问题在于:我在 php
控制台中执行 require_once __DIR__ . '/vendor/autoload.php';
,但它也不起作用。我对路径进行了三次和四次检查,自动加载就在那里。
"doesn't work" 是什么意思?自动加载要求成功。它允许我 使用 库。但是实际实例化导致
Class not found error.
不仅是我在 API
命名空间中的 类,它们位于文件顶部的命名空间中,并且恰好位于它们应该位于的文件夹中,而且我也无法实例化碳。我可以 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 { ... }
命名空间与目录名称不同会导致混淆。
还会有索引。php/front-controller 拉入 vendor/autoload.php 文件并大概运行框架。
我有一个项目,我需要一些包,所以我重新组织了项目以使用 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"
},
}
它在我的脚本中不起作用。但是,真正的问题在于:我在 php
控制台中执行 require_once __DIR__ . '/vendor/autoload.php';
,但它也不起作用。我对路径进行了三次和四次检查,自动加载就在那里。
"doesn't work" 是什么意思?自动加载要求成功。它允许我 使用 库。但是实际实例化导致
Class not found error.
不仅是我在 API
命名空间中的 类,它们位于文件顶部的命名空间中,并且恰好位于它们应该位于的文件夹中,而且我也无法实例化碳。我可以 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 { ... }
命名空间与目录名称不同会导致混淆。
还会有索引。php/front-controller 拉入 vendor/autoload.php 文件并大概运行框架。