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



我正在创建一个带有苗条和树枝的Web应用程序。我完美使用的库,我可以轻松地称呼它们,没有任何问题。但是,我自己的课程是由Composer.json AutoLoad PSR-4(PSR-0找不到的(找不到的这是我的文件系统:

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

这是我的composer.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/classes/Application.php

<?php
namespace classes;
class Application extends SlimApp {
    public function __construct($container = array()) {
        parent::__construct($container);
    }
}

最后我的index.php文件:

<?php
require '../../vendor/autoload.php';
$app = new classesApplication([
    "settings" => [
        "displayErrorDetails" => true
    ]
]);
$app->run();

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

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

然后使用状态代码0退出。它应该找到4个类,对吗?
并运行该应用显示错误:

致命错误:未被发现的错误:在/opt/lampp/htdocs/project/project/src/public/index.php:5

我敢肯定我缺少某些内容,指示一个命名空间或其他东西。谁能帮我吗?

编辑:
我尝试使用dump-autoload的 - 优化或 - classmap-authoritative选项。什么都没有改变。
在Composer.json中的文件夹名称中添加一个'/'不会更改任何内容。

我从另一个来源获得了解决方案。我个人不喜欢它,但可以工作。
文件系统没有更改。

composer.json自动加载:

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

src/public/index.php

<?php
require '../../vendor/autoload.php';
$app = new AppclassesApplication([
    "settings" => [
        "displayErrorDetails" => true
    ]
]);
$app->run();

src/classes/Application.php

<?php
namespace Appclasses;
class Application extends SlimApp {
    public function __construct($container = array()) {
        parent::__construct($container);
    }
}

我将从这个功能基础上工作,看看是否可以得到想要的结果。如果这样做,我将编辑此答案。

确保您的composer.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/"
    }
  }
}

即。 html/classes/ src/classes/

相关内容

  • 没有找到相关文章

最新更新