如何在Cakephp中间件类中导入自定义组件?
我有一个带有如何在Cakephp中间件类中导入自定义组件?,php,oop,cakephp,components,middleware,Php,Oop,Cakephp,Components,Middleware,我有一个带有 namespace App\Controller\Component 我的中间件类有一个名称空间 namespace App\Middleware; 如何在中间件中使用自定义组件?您不能,因为组件依赖于控制器。在中间件中加载组件是完全错误的,并且违背了框架的体系结构和设计模式 蛋糕=3.6和4.0 看起来您希望使用auth做一些事情,因此对于较新版本的CakePHP,使用身份验证插件的标识符,而不是使用auth组件。插件实现了一个中间件,特定的身份验证机制被抽象为标识符 首先导
namespace App\Controller\Component
我的中间件类有一个名称空间
namespace App\Middleware;
如何在中间件中使用自定义组件?您不能,因为组件依赖于控制器。在中间件中加载组件是完全错误的,并且违背了框架的体系结构和设计模式 蛋糕<3.6 重构一个对象中的组件,该对象除了请求和响应之外没有其他依赖项,然后创建一个将使用该对象的中间件 蛋糕>=3.6和4.0 看起来您希望使用auth做一些事情,因此对于较新版本的CakePHP,使用身份验证插件的标识符,而不是使用auth组件。插件实现了一个中间件,特定的身份验证机制被抽象为标识符
首先导入您的组件
use App\Controller\Component\DateComponent;
然后导入组件注册表
use Cake\Controller\ComponentRegistry;
然后将其声明为新变量,然后调用组件函数
$registry = new ComponentRegistry();
$date = new DateComponent($registry);
这无法可靠地工作,因为大多数组件依赖于ComponentRegistry中的控制器对象,此处未提供该对象。ComponentRegistry构造函数可以为控制器接受一个空参数,但大多数组件仍然需要它才能运行。或者,更好的是,将逻辑构建为Cake身份验证插件的标识符类Cake有一个身份验证中间件,您可以利用它:这是新的,我编写了这个插件。;)将其添加到答案中。您可以在其他插件的中间件中使用身份验证插件吗?我想编写一个日志中间件,并记录用户(如果有用户登录)。您可以阅读有关中间件工作原理的内容。该手册有一个关于中间件的完整章节,你可以在谷歌上找到解释http中间件概念的信息,也可以阅读PSR集团提供的文档。感谢你的快速回复:-)我在登录用户上一直得到空值。另一个原因是米德尔瓦雷的命令。我更改了它(
$middlewareQueue->prepend()
,而不是$middlewareQueue->add()
,这样首先执行身份验证和授权。之后,身份在新的日志中间件中设置并可用:php$identity=$request->getAttribute('identity');