PHP class_exists()找不到真正存在的类

时间:2019-03-28 00:25:55

标签: php cakephp namespaces autoload

我试图编写一个CakePHP身份验证插件,并在以下存储库之后对其进行结构化:https://github.com/ADmad/cakephp-jwt-auth

我还处于早期阶段,试图在cakePHPs constructAuthenticate()方法期间加载我的插件。我将问题的范围缩小到此方法在调用class_exists()

时找不到类

我的项目结构如下:

App/ plugins/ src/ Controller/ AppController.php Model/ vendor/ Admad/ cakephp-jwt-auth/ src/ Auth/ JwtAuthenticate.php composer.json nates/ cakephp-total-auth/ src/ Auth/ TotalAuthenticate.php composer.json

TotalAuthenticate是我要加载的类,它在TotalAuthenticate.php中定义的名称空间是:

namespace nates\TotalAuth\auth;

经过一些调试后,我发现传递到classs_exists()的路径是:

nates\TotalAuth\Auth\TotalAuthenticate

我已将所有这些信息与Admad/JwtAuth插件进行了比较,并且所有相对路径都匹配,并且该插件加载得很好,所以我对这里发生的事情以及为什么我的插件获胜感到无所适从不加载。

我在App/composer.json中的自动加载如下:

`"autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\Test\\": "tests/",
            "Cake\\Test\\": "vendor/cakephp/cakephp/tests/"
        }
    },`

还有我的插件composer.json

`"autoload": {
    "psr-4": {
      "nates\\TotalAuth\\": "src"
    }
  },
  "autoload-dev": {
    "psr-4": {
//      "ADmad\\JwtAuth\\Test\\": "tests"
    }` 

1 个答案:

答案 0 :(得分:0)

PSR-4自动加载标准要求名称空间与区分大小写的文件结构匹配。您可以在composer.json中使用大写字母nates\TotalAuth定义名称空间,但在类中将其定义为nates\totalauth\...

确保所有大小写均匹配且大小写均与文件结构匹配。