未找到 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 中。
我尝试为 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 中。