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

我的作曲家psr-4自动加载有什么问题?

微生毅
2023-03-14

我正在用Slim和Twig创建一个web应用程序。我使用的库工作得很好,我可以轻松地调用它们。然而,作曲家并没有找到我自己的类。json自动加载psr-4(psr-0也找不到它们)
这是我的文件系统:

project
   |composer.json
   |src
       |public
       |   |index.php
       |classes
       |   |Application.php
       |   |middlewares
       |       |SecurityMiddleware.php
       |templates
           |TemplateController.php
           |main
               |MainController.php

这是我的作曲家。json

{
    "authors": [
        {
            "name": "Jean-Marc ZIMMER",
            "email": "################@gmail.com",
            "role": "Developer"
        }
    ],
    "require": {
        "slim/slim": "^3.11",
        "slim/extras": "*",
        "twig/twig": "^2.5",
        "slim/twig-view": "^2.4",
        "slim/views": "^0.1.3"
    },
    "autoload": {
        "psr-4": {
            "src\\": "src",
            "middlewares\\": "src/classes/middlewares",
            "classes\\": "src/classes",
            "templates\\": "src/templates"
        }
    }
}

然后src/class/Application.php

<?php

namespace classes;

class Application extends \Slim\App {

    public function __construct($container = array()) {
        parent::__construct($container);
    }
}

最后是我的索引。php文件:

<?php

require '../../vendor/autoload.php';

$app = new \classes\Application([
    "settings" => [
        "displayErrorDetails" => true
    ]
]);
$app->run();

当我运行composer dump autoload时,命令输出:

生成包含0类的自动加载文件

然后以状态代码0退出。应该能找到4个班吧?
运行应用程序显示错误:

致命错误:未捕获错误:类'类\应用程序'未找到 /opt/lampp/htdocs/project/src/public/index.php: 5

我肯定我错过了一些东西,指示一个命名空间或什么的。有人能帮帮我吗?

编辑:
我尝试使用--optimize或--classmap authorivative选项进行转储自动加载。什么也没变
将“/”添加到composer中的文件夹名称。json不会改变任何东西。

共有2个答案

曾航
2023-03-14

确保您的编写器。json引用您的部署路径。例如:

Dockerfile文件

FROM php:7.2-apache

COPY src /var/www/html
COPY vendor /var/www/vendor

composer.json

{
  "autoload": {
    "psr-4": {
      "Acme\\": "html/classes/"
    }
  }
}

i、 e.html/classes/notsrc/classes/

戚飞雨
2023-03-14

我从另一个来源得到了一个解决方案。我个人不喜欢它,但它的工作原理。
文件系统没有改变。

作曲家。json自动加载:

"autoload": {
    "psr-4": {
        "App\\": "src/"
    }
}

src/public/index。php

<?php

require '../../vendor/autoload.php';

$app = new \App\classes\Application([
    "settings" => [
        "displayErrorDetails" => true
    ]
]);
$app->run();

src类pplication.php

<?php
namespace App\classes;

class Application extends \Slim\App {

    public function __construct($container = array()) {
        parent::__construct($container);
    }
}

我要从这个功能基础开始工作,看看我是否能得到我想要的结果。如果我这样做,我会编辑这个答案。

 类似资料:
  • 我开始学习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 测试/功能/主页测试。

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

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

  • 我和许多其他人一样,似乎很难弄清楚何时以及如何使用自动加载。我想我理解作曲家和PSR-0/PSR-4的概念和这需要的目录结构。但是如果我用自己的MVC框架构建自己的项目 > 由于composer自带了自动加载器,它将加载我希望包含在项目中的所有依赖项,如果我不打算将我的网站变成分布式项目,我甚至需要自己的名称空间吗?为什么我不坚持使用include/requires? 最后,如果我采用名称空间,使

  • 我按照作曲家的说明,成功安装了作曲家。我想使用Tumblr全新的php api客户端。 我的文件夹结构: : : 使用也非常有效。但是当执行找不到该类。 致命错误:类'Tumblr\API\Client'未在第9行的[...]/htdocs/Tumblr/myfile.php中找到