PSR 4 - PSR -0自动加载与作曲家不工作,但它完美地与PSR -4自动加载



我尝试用PSR-0自动加载文件,但它不能自动加载该文件。我用PSR-4自动加载尝试了相同的文件。对于PSR-4,它可以完美地工作。PSR-0的文件夹结构有什么不同吗?

我不能使PSR-0工作,即使保持提到的文件夹结构PSR-0和PSR-4的区别是什么?

这是我的文件夹结构

Test
    --Package
        --Test.php

我有在Test.php:

<?php
namespace TestPackage;
class Test
{
    public function __construct()
    {
        echo "In Test class";
    }
}

composer.json看起来像

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

与直觉相反,PSR-0上的编写器文档包含了一个部分路径,这使得PSR-0似乎需要一个到包的路径才能加载类。实际上,PSR-0基于包构建路径,因此只有当代码位于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

当需要加载没有组织到典型命名空间文件夹树中的类时,也可以简单地指定一个文件夹列表,在其中使用classmap数组搜索类。

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

但是,一般来说,使用PSR-0或PSR-4将提供更容易的体验,因为classmap方法要求单独指定每个文件夹。

相关内容

  • 没有找到相关文章

最新更新