在苗条状态下自动加载类的行为很奇怪

时间:2018-08-11 09:18:24

标签: slim autoload

我使用标准Ubuntu 1604 env在本地Vagrant(在Windows上运行)上开发了Slim-3应用程序。

在我的composer.json中,插入了autoload指令:

"autoload": {
  "psr-4": {
    "btc\\": "src\btc"
  }
}

在我的src\btc文件夹中,我在每个PHP类文件的顶部创建了几个带有namespace btc声明的类。

尤其是我有一个http.php文件,如下所示:

namespace btc;
class Http {

    const SUCCESS_WITH_OUTPUT = 200;
    const SUCCESS_WITH_NO_OUTPUT = 204;
    const SUCCESS_POST_WITH_OUTPUT = 201; //CREATED
    const FAIL_AUTH = 401;
    const BAD_REQUEST = 400;
    const FAIL_OTHERWISE = 403;
}

在我的routes.php中,我有以下引用:

$output = ['res' => 'Method not implemented', 'status'=>btc\Http::BAD_REQUEST];

这在我的本地游民机上工作正常。

===========

现在,我克隆了存储库以部署到我的生产计算机上。

  • composer update运行正常。
  • 我又跑了composer dumpautoload次来创建自动加载文件。
  • 在正确映射路由的意义上,Slim应用可以正常运行。
  • 但是无法说出class 'btc/Http' not found错误。

我认为这是由于btc名称空间未自动加载引起的。

我在这里错过了什么吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我已找到导致此奇怪行为的错误:区分大小写。

由于我的Linux Vagrant计算机在Windows上运行,因此它不关心大小写。因此http.phpHttp.php是相同的。

但是在纯Linux环境中,这两个是不同的。

更改为Http.php,一切正常。

答案 1 :(得分:0)

对于作曲家中的所有路径,请使用/

示例:

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

然后运行composer update