【问题标题】:PHP class_exists() cannot find a class that truly existsPHP class_exists() 找不到真正存在的类
【发布时间】:2019-08-18 16:23:57
【问题描述】:

我正在尝试编写一个 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"
    }` 

【问题讨论】:

  • composer.json 自动加载中有什么内容?
  • @ccKep 感谢您查看此内容。我已经用我的 App/composer.json 和我的 Plugin/composer.json 更新了这个问题,因为我不知道你想看哪一个
  • @ccKep 我在玩 ADmad/cakephp-jwt-auth 插件(正确加载的插件),我能够打破它的加载并再次修复它。这导致我发现我的插件(nates/TotalAuth)没有列在 autoload_static.php 文件中,而 ADmad 是。这可能是 PHP 无法识别我的课程的原因吗?我什至应该直接编辑这个 autoload_static.php 文件吗?
  • 你应该直接编辑那个文件,它是由composer dump-autoload创建的——所以运行那个命令。

标签: php cakephp namespaces autoload


【解决方案1】:

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

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

【讨论】:

  • 抱歉,这是我在 SO 上输入的问题。外壳全部匹配
  • 我在玩 ADmad/cakephp-jwt-auth 插件(正确加载的插件),我能够打破它的加载并再次修复它。这导致我发现我的插件(nates/TotalAuth)没有列在 autoload_static.php 文件中,而 ADmad 是。这可能是 PHP 无法识别我的课程的原因吗?我什至应该直接编辑这个 autoload_static.php 文件吗?
猜你喜欢
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
相关资源
最近更新 更多