如何在 Table 个对象中使用组件?

How to use components in Table Objects?

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

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

你不这样做,组件是控制器层的服务,你不应该在那个上下文之外使用它们(CakePHP 2.x 在内部确实使用了那个上下文之外的组件,但是据我所知练习以 CakePHP 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
});

当然还有更多的解耦方法,例如依赖注入,因此您可能需要花一些时间熟悉解耦的主题。