【问题标题】:autoload a class in slim behaves strangely在 slim 中自动加载一个类的行为很奇怪
【发布时间】:2018-08-13 20:15:55
【问题描述】:

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

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

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

在我的src\btc 文件夹中,我创建了几个类,每个类文件的顶部都有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];

这在我本地的 vagrant 机器上运行良好。

============

现在我克隆了 repo 以部署到我的生产机器上。

  • composer update 运行良好。
  • 我又跑了一次composer dumpautoload 来创建自动加载文件。
  • Slim 应用程序运行正常,因为路线已正确映射。
  • 但它没有说class 'btc/Http' not found 错误。

我认为这是由于 btc 命名空间没有自动加载。

我错过了什么吗?

感谢您的帮助。

【问题讨论】:

    标签: slim autoload


    【解决方案1】:

    我找到了导致这种奇怪行为的错误:区分大小写。

    由于我的 Linux Vagrant 机器在 Windows 上运行,它不关心大小写。所以http.phpHttp.php 是一样的。

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

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

    【讨论】:

      【解决方案2】:

      请为 composer 中的所有路径使用/

      例子:

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

      然后运行composer update

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-01
        • 2017-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        • 2011-02-14
        相关资源
        最近更新 更多