psr-0自动加载与作曲家没有wotking,但它与psr-4自动加载完美配合

时间:2016-06-29 06:18:32

标签: composer-php psr-4 psr-0

我尝试使用PSR-0自动加载文件,但它不会自动加载该文件。我尝试使用PSR-4自动加载相同的文件。使用PSR-4,它工作得很好。 PSR-0所需的文件夹结构有什么不同吗?

即使保留What is the difference between PSR-0 and PSR-4?

中提到的文件夹结构,我也无法使PSR-0正常工作

这是我的文件夹结构。

Test
    --Package
        --Test.php

我在Test.php

<?php
namespace Test\Package;

class Test
{
    public function __construct()
    {
        echo "In Test class";
    }
}

composer.json看起来像

{
  "autoload": {

    "psr-0": {
            "Test\\Package\\": "Test/Package/"
             }
  }
}

1 个答案:

答案 0 :(得分:1)

与直觉相反,the composer documentation on PSR-0包含一个部分路径,使PSR-0看起来需要一个路径来加载类。实际上,PSR-0基于包构建路径,因此如果代码位于{em> not 之类的src/lib/文件夹内,则只需要指定路径命名空间路径的一部分。如果基于名称空间的目录结构在与composer.json相同的目录中启动,则不需要路径。

假设问题中指定了目录结构,可以使用composer加载此类的几种方法。

PSR-0

{
  "autoload": {
    "psr-0": { "Test\\Package\\": "" }
  }
}

请注意,即使代码位于Test/Package/,此文件夹在PSR-0中也未指定

PSR-4

对于PSR-4自动加载,包源的路径必须出现在composer.json文件中。

{
  "autoload": {
    "psr-4": { "Test\\Package\\": "Test/Package/" }
  }
}

类映射

如果存在加载未组织到典型命名空间文件夹树中的类的要求,则还可以使用classmap数组简单地指定要在其中搜索类的文件夹列表。

{
  "autoload": {
    "classmap": [ "Test/Package/" ]
  }
}

但是,一般情况下,使用PSR-0或PSR-4会提供更简单的体验,因为classmap方法需要单独指定每个文件夹。