【问题标题】:PSR-4 Autoloader not recognizing classes in subfolder structurePSR-4 Autoloader 无法识别子文件夹结构中的类
【发布时间】:2018-06-05 17:21:47
【问题描述】:

我使用 Slim PHP 作为我的应用程序的底层框架,并使用 composer autoload 来加载我的类。在作曲家我有这个 psr-4 配置:

 "psr-4": {
      "App\\": "app/classes/"
    }

我所有的课程都在 /app/classes/ 文件夹中。

在我的类文件夹中,我有所有常见的类,但我在子文件夹中有模块特定的类。

从我的 ../classes/connect.php 文件中,我在相应的命名空间下拥有此方法:

namespace App;
class connect
{
  public function authenticate(){
    office\AuthenticationManager::acquireAppToken(200);
  }
}

在我的子文件夹 ../classes/office/ 我有一个名为 office.php 的文件,使用这种方法:

namespace App\office;
    class AuthenticationManager
    {
        public function acquireAppToken($tid)
        {
           \App\APIManager\RequestManager::sendPostRequest();
        }
    }

上述方法正在调用另一个位于 ../classes/api.php 中的方法

该文件中的命名空间是

namespace App\APIManager;

问题是,当调用最后一个方法时,我收到以下错误: 未找到“\App\APIManager\RequestManager”...

我已经尝试使用 composer dump-autoload 解决这个问题,但它没有帮助。为什么会发生此错误?

【问题讨论】:

  • 我会说从单独命名空间的类中调用另一个类的静态函数是一种不好的做法。使用依赖注入要好得多。

标签: php composer-php autoload psr-4


【解决方案1】:

如果你想在App\APIManager 命名空间中有一个名为RequestManager 的类,那么它必须位于APIManager/RequestManager.php 文件中。

同样适用于AuthenticationManager类,应该移动到office/AuthenticationManager.php

看看PSR-4 examples

【讨论】:

    猜你喜欢
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 2021-09-06
    相关资源
    最近更新 更多