Composer:如何在/ src中递归自动加载子文件夹

时间:2014-12-24 16:02:41

标签: php composer-php autoload

我正在为一个composer包编写一些测试,但是我无法在/ src的子文件夹中加载类。

我的文件夹结构

root
 - src
   - file1.php
   - folder1
     - folder2
       - file2.php
 - tests

测试'文件夹结构反映了src。

之一

在我的composer.json中我是:

{
    "autoload": {
        "psr-4": {
            "Namespace1\\\Package_Namespace\\\": "src"
        }
    }
}

现在,当我启动测试时,只有src中的那些可以很好地包含它们自己的类,而使用子文件夹中的类的那些不能(例如,永远不会加载file2.php)。 / p>

我还试图在composer.json文件中明确指定子文件夹,但它似乎无效。

我希望有人可以帮助我。如果您需要更多信息,请告诉我,我会提供。

谢谢你,祝你圣诞快乐!

2 个答案:

答案 0 :(得分:2)

我认为您可能需要在配置中转义命名空间:

"autoload": { "psr-4": { "Namespace1\\Package_Namespace\\": "src" } }

并确保您的课程/文件名遵循PSR-4。另外,确保PHPUnit /您运行的任何测试套件都加载了composer autoload文件。

ETA:

您也可以手动将测试添加到bootstrap.php文件中的命名空间(如果您使用的是测试中的命名空间):

$loader = require __DIR__ . "/../vendor/autoload.php";
$loader->addPsr4('Namespace1\\Package_Namespace\\', __DIR__.'/testdir');

显然,您需要根据路径调整上述内容。

答案 1 :(得分:0)

我认为Composer加载psr-4地图的方式有问题。

事实上,我已经更改了反映文件夹结构的命名空间,现在一切正常。

我认为命名空间可能与文件夹结构不同,但这不起作用。

我无法更好地解释我的解决方案,但只有反映文件夹结构才有效。这是一种随意性吗?麻将!

无论如何,它现在有效......