当前位置: 首页 > 知识库问答 >
问题:

作曲家PSR-4自动加载不工作后尝试多种方法和教程[重复]

刘运浩
2023-03-14

我正在为我的框架的功能制作一个composer库,但我遇到了这个问题,问题是psr-4的自动加载。

我有以下结构

├───src
├───test
└───vendor
    ├───composer
    ├───symfony
    │   ├───polyfill-ctype
    │   └───polyfill-mbstring
    │       └───Resources
    │           └───unidata
    ├───twig
    │   └───twig
    │       ├───doc
    │       │   ├───filters
    │       │   ├───functions
    │       │   ├───tags
    │       │   └───tests
    │       └───src
    │           ├───Cache
    │           ├───Error
    │           ├───Extension
    │           ├───Loader
    │           ├───Node
    │           │   └───Expression
    │           │       ├───Binary
    │           │       ├───Filter
    │           │       ├───Test
    │           │       └───Unary
    │           ├───NodeVisitor
    │           ├───Profiler
    │           │   ├───Dumper
    │           │   ├───Node
    │           │   └───NodeVisitor
    │           ├───RuntimeLoader
    │           ├───Sandbox
    │           ├───Test
    │           ├───TokenParser
    │           └───Util
    └───xenframe
        └───hello
            └───src

最后一个文件夹是MyLibrary,其中包含hello文件夹。

在hello文件夹的根目录中,我有一个composer.json和一个src文件夹。

composer.json

{
    "name": "xenframe/hello",
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "XENONMC",
            "email": "support@xenonmc.xyz"
        }
    ],
    "minimum-stability": "stable",
    "require": {
    
    
    },
    "autoload": {

      "psr-4": {
      
        "hello\\": "/src"
      
      }

    }

}

src/文件夹内是主文件-

index.php

<?php

namespace xenframe\hello;

class App {

function __construct() {

echo "object constructed";

}

}

echo "hello world was loaded";

现在,用法在我的rootindex.php中。

index.php

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$root = str_replace('\\', '/', __DIR__);

// setup composer autoloader
require_once $root . '/vendor/autoload.php';

// visit us as https://xenonmc.xyz

use xenframe\hello\App;

$hi = new App();

o) 使用了psr-4,如下面的“xenframe\\hello”:“src/”
o)使用了类路径,我不喜欢这一个,因为psr-4是作曲家的推荐标准。
o)使用psr-0,我也没有选择这一个,因为有很多详细内容。

谢谢

共有1个答案

邢鸿博
2023-03-14

在测试给定代码时,通过将src中的index.php重命名为与文件中类名相关的App.php来解决问题。在psr-4部分中也使用了"xenframe\\Hello\\":"src/"composer.json中。

值得一提的是,虽然作曲家无法自动加载所需的类,但由于PSR-4不符合要求,作曲家没有报告错误。

这些问题是:

  1. 类的文件名不符合PSR-4规范。来自第2.3.3节

终止类名对应于以. php结尾的文件名。文件名必须与终止类名的大小写匹配。

psr-4键下,您定义了相对于包根目录从命名空间到路径的映射。当自动加载一个类时,像Foo\\Bar\\Baz命名空间前缀Foo\\指向一个目录src/意味着自动加载器将查找一个名为src/Bar/Baz.php并包括它,如果存在。

 类似资料:
  • 我开始学习Composer,并正在开发一个系统,在该系统中,我将文件与核心应用程序文件分开,如下所示: 所以,要在composer中设置此设置。json文件并访问所有类/App much/Core会这样吗? 还是有更正确的方法? 我也读过PSR-0和PSR-4的比较,我仍然有点怀疑应该使用哪一种。在我的情况下,我应该实现什么,PSR-0还是PSR-4?

  • 我正在使用一些phpunit测试类尝试composer autoload,但我似乎无法让它工作。当我从命令行运行phpunit时,我得到以下错误:“PHP致命错误:Class…notfound”。 我将提供所有的结构和文件信息。我可以,所以希望有人能发现我的错误。 结构(精简为相关文件): composer.json phpunit.xml 测试/功能/基本测试用例。php 测试/功能/主页测试。

  • 其实我是新的PHP。我在一个几乎是空的文件夹中运行这个(实际上是按照劳拉-cast教程:用TDD设计一个流畅的应用编程接口)。 我的目录结构看起来像 src 表情。php 表达测试。php 内部作曲家。json: 内部表达测试。php: 内心的表达。php 然后我运行composer dump autoload并运行phpunit,但仍然得到: 我的语法有问题吗?我对作曲家的理解是非常基本的。提前

  • 我很难理解这个简单的界面有什么问题。 当我收到下面的通知 弃用通知:./App/Interfaces/renderData.php中的类App\Interfaces\renderData不符合psr-4自动加载标准。它将不再在Composer v2.0中自动加载。 composer.json自动加载部分: 文件夹结构为: 我已经尝试将应用重命名为应用,然后转储自动加载,但问题仍然存在。

  • 如何自动加载助手函数(在任何类之外)?我可以在应该首先加载的某种引导文件?

  • 文件自动加载_psr4。php不包含“autoloaddev”部分的名称空间,仅包含“autoload”部分的名称空间。 当我的作曲家。json读取 然后我跑了 My/vendor/composer/autoload_prs4。php文件显示为 谢谢