我试图为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实用程序作为起点(这也将解决您的自动加载问题!(,并将代码复制到它创建的类中。