如何使用表对象中的组件?

时间:2018-03-21 12:57:06

标签: php cakephp cakephp-3.0

我有一个发送短信的组件。当用户刚刚注册时,我想在用户表中触发。我能这样做吗?如果我能做到,怎么做?

我在文档上看不到:https://book.cakephp.org/3.0/en/controllers/components.html

1 个答案:

答案 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
});

肯定有其他方法可以解耦,例如依赖注入,所以你可能需要花一些时间让自己熟悉解耦的主题。