我竭尽所能找到适用的问题/答案,但我认为我对自动加载器的理解不足以识别合适的答案。
我有一个包裹,带有以下composer.json:
{
"name": "Pva_agent",
"type":"library",
"description" : "query the pva agent",
"version":"0.1b",
"authors" : [
{
"name":"Ed Greenberg",
"email":"ed@precisionpros.com"
}
],
"minimum-stability":"dev",
"require": {},
"autoload": {
"psr-0": {
"Pva_agent": "."
}
}
}
包装的作曲家安装后我的目录结构:
.
./vendor
./vendor/autoload.php
./vendor/Pva_agent
./vendor/Pva_agent/Agent.php
./vendor/Pva_agent/composer.json
./vendor/Pva_agent/.gitignore
./vendor/composer
./vendor/composer/autoload_psr4.php
./vendor/composer/autoload_real.php
./vendor/composer/autoload_classmap.php
./vendor/composer/autoload_namespaces.php
./vendor/composer/installed.json
./vendor/composer/autoload_static.php
./vendor/composer/ClassLoader.php
./vendor/composer/LICENSE
./composer.lock
./composer.json
./test_pva_agent.php
我的测试程序:
<?php
require_once('vendor/autoload.php');
use Pva_agentAgent;
$agent = new Agent();
我的结果:
edg@arthur pva_project $ php test_pva_agent.php
PHP Fatal error: Class 'Pva_agentAgent' not found in /home/edg/PhpstormProjects/pva_project/test_pva_agent.php on line 6
PHP Stack trace:
PHP 1. {main}() /home/edg/PhpstormProjects/pva_project/test_pva_agent.php:0
edg@arthur pva_project $
我认为我不需要"使用"语句,因为自动加载器应该找到该类,对吗?
有人可以告诉我问题在哪里吗?
谢谢,
ed Greenberg
您的 pva_agent 库不应坐在vendor/
目录中。该目录应仅包含来自作曲家的自动生成数据。该目录通常不存储在VC中。
您应该考虑将目录结构重构为类似的内容:
.
|____composer.json
|____composer.lock
|____src
| |____Pva_agent
|____vendor
您的库功能应添加到src/Pva_agent
目录。
考虑使用PSR-4而不是PSR-0进行自动加载功能,因为添加类时无需再生自动加载器。添加分类后,必须在PSR-0的情况下运行dump-autoloader。
对于上述目录结构和PSR-4自动加载器,您的composer.json
自动加载部分应看起来与此相似:
"autoload": {
"psr-4": { "Pva_agent\": "src/Pva_agent" }
}
此后应自动加载您的库。您的自动加载库将在Pva_agent
名称空间下注册。