第一个作曲家软件包 - 自动加载器不起作用



我竭尽所能找到适用的问题/答案,但我认为我对自动加载器的理解不足以识别合适的答案。

我有一个包裹,带有以下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名称空间下注册。

相关内容

  • 没有找到相关文章

最新更新