我有一个发送短信的组件。当用户刚刚注册时,我想在用户表中触发。我能这样做吗?如果我能做到,怎么做?
我在文档上看不到:https://book.cakephp.org/3.0/en/controllers/components.html
答案 0 :(得分:0)
你不这样做,组件是控制器层的服务,你不应该在那个上下文之外使用它们(CakePHP 2.x内部确实使用了那个上下文之外的组件,但是那个练习以CakePHP结束的AFAIK 3)!
相反,例如让你的模型调度一个事件:
// eventManager() before CakePHP 3.4
$this->getEventManager()->dispatch(
new \Cake\Event\Event('Model.Users.afterRegister', $this, ['user' => $userEntity])
);
您的组件可以收听,并相应地发送短信:
$manager = \Cake\Event\EventManager::instance();
$manager->on('Model.Users.afterRegister', function (\Cake\Event\Event $event) {
// subject() and data() before CakePHP 3.4
$usersTable = $event->getSubject();
$userEntity = $event->getData('user');
// ... send SMS
});
肯定有其他方法可以解耦,例如依赖注入,所以你可能需要花一些时间让自己熟悉解耦的主题。