CakePHP 4自定义插件找不到类



我试图为CakePHP 4创建一个自定义插件。但每次我出现错误时,插件都找不到插件的类。

我在Application.php 中加载插件

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

在蛋糕的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 WirecoreCakePHP_JWTMiddleware;

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

未找到类"Wirecore\CakePHP_JWT\Middleware\TrackingCookieMiddleware">

这里是中间件功能的代码:

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

我尝试过更改名称空间,但它不起作用,我尝试过使用composer dumpautoload,但它再次没有改变。有什么想法吗?

composer文件中的autoload部分是告诉PHP如何在磁盘上查找命名空间的部分。类的名称空间前缀WirecoreCakePHP_JWT不是您在autoload部分中列出的名称空间,而是您列出的WirecoreCakePHP-JWT-Plugin。要么修复命名空间声明以匹配自动加载,如下所示:

use WirecoreCakePHP-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应用程序的自定义插件,那么根据文档,你的类应该被困在/plugins而不是/src中https://book.cakephp.org/4/en/plugins.html#creating-您自己的插件

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

最新更新