Composer php composer自动加载和名称空间出现问题
我正在尝试创建一个Packagist/Composer包,用于对命名空间和Composer进行一些培训。我不知道如何允许从Composer php composer自动加载和名称空间出现问题,composer-php,autoload,Composer Php,Autoload,我正在尝试创建一个Packagist/Composer包,用于对命名空间和Composer进行一些培训。我不知道如何允许从vendor/autoload.php自动加载 实际代码可以在这里看到:https://github.com/ThomasKasper/Passthrough或以下示例 这是我的文件结构: root |---composer.json |---src |----Passthrough |----Folder1 |SomeClass
vendor/autoload.php
自动加载
实际代码可以在这里看到:https://github.com/ThomasKasper/Passthrough
或以下示例
这是我的文件结构:
root
|---composer.json
|---src
|----Passthrough
|----Folder1
|SomeClass.php
|----Folder2
|----Folder3
|----Folder4
composer.json:
{
"name": "passthrough/passthrough",
"description": "A simple MVC framework",
"license": "MIT",
"keywords": ["passthrough", "framework"],
"require": {
"php": ">=5.3.0"
},
"autoload": {
"psr-4": {
"Passthrough\\": "src/Passthrough"
}
},
"autoload-dev": {
"psr-4": {
"Passthrough\\": "src/Passthrough"
}
}
}
一个示例类:
<?php
namespace Passthrough\Folder1;
class SomeClass
{
}
由于示例脚本没有失败,包括
vendor/autoload.php
,因此我们可以安全地假设您实际运行了
$ composer dump-autoload
但是,如果在运行上述命令后修改了自动加载配置,那么这可能就是找不到该类的原因
此外,假设自动加载已正确设置,那么脚本失败的唯一原因可能是类Passthrough\Folder1\SomeClass
不存在于src/Passthrough/Folder1/SomeClass.php
中,而自动加载程序实际上正在查找它
猜测
从您的示例脚本和到存储库的链接可以猜到示例实际上可能是这样的:
那么输出是这样的:
PHP Fatal error: Class 'Passthrough\Base\Data\Callback' not found in /Users/am/Sites/stackoverflow/34509692/src/Passthrough/Routing/Route/Route.php on line 92
PHP Stack trace:
PHP 1. {main}() /Users/am/Sites/stackoverflow/34509692/app.php:0
PHP 2. Passthrough\Routing\Route\Route->__construct() /Users/am/Sites/stackoverflow/34509692/app.php:7
Fatal error: Class 'Passthrough\Base\Data\Callback' not found in /Users/am/Sites/stackoverflow/34509692/src/Passthrough/Routing/Route/Route.php on line 92
原因是中引用的类Passthrough\Base\Data\Callback
实际上不存在于项目中
无关的
与您的问题无关,但是为开发和非开发环境设置相同的自动加载没有意义,您应该相应地调整composer.json
,并删除autoloaddev
部分:
{
"name": "passthrough/passthrough",
"description": "A simple MVC framework",
"license": "MIT",
"keywords": ["passthrough", "framework"],
"require": {
"php": ">=5.3.0"
},
"autoload": {
"psr-4": {
"Passthrough\\": "src/Passthrough"
}
}
}
作为参考,请参阅。您是使用Composer安装软件包还是运行了
Composer dump autoload
其他?这是我完全的白痴,谢谢您指出我的白痴。
PHP Fatal error: Class 'Passthrough\Base\Data\Callback' not found in /Users/am/Sites/stackoverflow/34509692/src/Passthrough/Routing/Route/Route.php on line 92
PHP Stack trace:
PHP 1. {main}() /Users/am/Sites/stackoverflow/34509692/app.php:0
PHP 2. Passthrough\Routing\Route\Route->__construct() /Users/am/Sites/stackoverflow/34509692/app.php:7
Fatal error: Class 'Passthrough\Base\Data\Callback' not found in /Users/am/Sites/stackoverflow/34509692/src/Passthrough/Routing/Route/Route.php on line 92
{
"name": "passthrough/passthrough",
"description": "A simple MVC framework",
"license": "MIT",
"keywords": ["passthrough", "framework"],
"require": {
"php": ">=5.3.0"
},
"autoload": {
"psr-4": {
"Passthrough\\": "src/Passthrough"
}
}
}