未找到 CakePHP 4 自定义插件 类

CakePHP 4 custom plugin dont find classes

我尝试为 CakePHP 4 创建一个自定义插件。但是每次我都会出错,插件无法找到插件的 类。

我在 Application.php

中加载插件
use Wirecore\CakePHP_JWT\Plugin as CakePHPJwt;

$plugin = new CakePHPJwt();
$this->addPlugin($plugin);

在 cake 的 composer.json 文件中也加载了:

"autoload": {
    "psr-4": {
        "App\": "src/",
        "Wirecore\CakePHP_JWT\": "./plugins/CakePHP-JWT-Plugin/src/"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\Test\": "tests/",
        "Cake\Test\": "vendor/cakephp/cakephp/tests/",
        "Wirecore\CakePHP_JWT\Test\": "./plugins/CakePHP-JWT-Plugin/tests/"
    }
}

我在 /plugins/CakePHP-JWT-Plugin/src/Middleware/JwtMiddleware.php 中使用文档 Middleware 的示例代码创建了一个文件。我将示例代码的命名空间更改为

namespace Wirecore\CakePHP_JWT\Middleware;

在此之后,我尝试在插件的中间件功能中加载中间件,但每次我都会出现此错误:

Class 'Wirecore\CakePHP_JWT\Middleware\TrackingCookieMiddleware' not found

这里是中间件函数的代码:

use Wirecore\CakePHP_JWT\Middleware\TrackingCookieMiddleware;

$middlewareQueue->add(new TrackingCookieMiddleware());
return $middlewareQueue;

我曾尝试更改命名空间,但它不起作用,我尝试使用 composer dumpautoload 进行尝试,但同样没有任何改变。有什么想法吗?

composer 文件中的自动加载部分告诉 PHP 如何在磁盘上找到您的命名空间。 class、Wirecore\CakePHP_JWT 的命名空间前缀不是您在 autoload 部分中列出的命名空间,您列出的是 Wirecore\CakePHP-JWT-Plugin。修复命名空间声明以匹配自动加载,如下所示:

use Wirecore\CakePHP-JWT-Plugin\ .. etc

.. 或更改修复自动加载部分以匹配命名空间声明中列出的名称:

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

此外,我不确定您在此处遵循的标准是什么,但它们可能看起来不正确。

这是一个独立的插件吗?如果是这样,我会镜像另一个独立插件的结构,比如 https://github.com/dereuromark/cakephp-geo/

如果这个不是一个独立的插件(这似乎更有可能),而只是一个直接放入现有 CakePHP 应用程序的自定义插件,根据文档 https://book.cakephp.org/4/en/plugins.html#creating-your-own-plugins

,你 classes 应该卡在 /plugins 而不是 /src

您可能只想使用 Bake utility 作为起点(这也可以解决您的自动加载问题!)并将您的代码复制到它创建的 classes 中。