Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Cakephp中间件类中导入自定义组件?_Php_Oop_Cakephp_Components_Middleware - Fatal编程技术网

如何在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');