【发布时间】:2018-12-26 02:54:37
【问题描述】:
我有一个带有
的通用OAuthComponent
namespace App\Controller\Component
我的中间件类有一个命名空间
namespace App\Middleware;
如何在中间件中使用自定义组件?
【问题讨论】:
标签: php oop cakephp components middleware
我有一个带有
的通用OAuthComponent
namespace App\Controller\Component
我的中间件类有一个命名空间
namespace App\Middleware;
如何在中间件中使用自定义组件?
【问题讨论】:
标签: php oop cakephp components middleware
你不能,因为组件依赖于控制器。在中间件中加载组件是完全错误的,并且违背了框架的架构和设计模式。
将组件重构为一个除了请求和响应之外没有其他依赖关系的对象,然后创建一个将使用该对象的中间件。
看起来你想用 auth 做点什么,所以对于新版本的 CakePHP,使用身份验证插件的标识符,而不是使用 auth 组件。该插件实现了一个中间件,并将特定的身份验证机制抽象为标识符。
【讨论】:
$middlewareQueue->prepend() 而不是$middlewareQueue->add(),以便首先执行身份验证和授权。之后,身份设置并在新的 LoggingMiddleware 中可用:php $identity = $request->getAttribute('identity');
先导入你的组件
use App\Controller\Component\DateComponent;
然后导入组件注册表
use Cake\Controller\ComponentRegistry;
然后将其声明为新变量然后调用组件函数
$registry = new ComponentRegistry();
$date = new DateComponent($registry);
【讨论】: