CakePHP 3.x事件系统

时间:2016-01-30 22:27:37

标签: php cakephp

我无法弄清楚为什么模型中的afterSave事件没有被触发。当我在表的initialize方法中运行save方法时,似乎没有触发afterSave事件。

在我的班级课程中:

public function initialize(array $config) {
    parent::initialize($config);
    ....
    $this->save($test);
}

public function afterSave($event, $entity, $options) {
    Log::debug('yay the event fired.');
}

该项目已保存 - 我已检查过 - 并且我没有实施任何会阻止该事件传播的内容。我已经测试过afterSave事件设置正确,因为当我在初始化方法之外保存 - 从控制器 - 它工作正常。在2.x中,这可以正常工作。

我会承认,即使我已经阅读了整本关于活动系统的书,有些我还没有完全掌握它,所以我可能会遗漏一些东西?

感谢。

1 个答案:

答案 0 :(得分:1)

在这种情况下,查看源代码通常会有所帮助。

std::cout
std::vector

<强> https://github.com/cakephp/cakephp/blob/3.2.0/src/ORM/Table.php#L282-L283

如您所见,在将表注册为事件侦听器之前调用public function __construct(array $config = []) { // ... $this->initialize($config); $this->_eventManager->on($this); // ... } 方法,因此不会调用您的事件回调。

因此,要实现您尝试在那里做的事情,即在实例化/初始化模型并调用模型回调时保存某些内容,您可以使用构造函数或initialize事件侦听器