【问题标题】:How to use components in Table Objects? [closed]如何在 Table Objects 中使用组件? [关闭]
【发布时间】:2018-03-21 12:57:06
【问题描述】:

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

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

【问题讨论】:

标签: php cakephp cakephp-3.0


【解决方案1】:

你不要那样做,组件是控制器层的服务,你不应该在那个上下文之外使用它们(CakePHP 2.x 内部确实使用了那个上下文之外的组件,但是 AFAIK 这种做法以 CakePHP 结束3)!

例如,让您的模型调度一个事件:

// eventManager() before CakePHP 3.4
$this->getEventManager()->dispatch(
    new \Cake\Event\Event('Model.Users.afterRegister', $this, ['user' => $userEntity])
);

您的组件可以收听,并相应地发送 SMS:

$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
});

肯定还有其他方法可以解耦,例如依赖注入,因此您可能需要花一些时间熟悉解耦主题。

【讨论】:

    猜你喜欢
    • 2020-05-14
    • 2013-12-07
    • 2018-04-01
    • 2019-11-29
    • 2014-05-16
    • 1970-01-01
    • 2016-02-01
    • 2015-05-18
    • 1970-01-01
    相关资源
    最近更新 更多