我无法弄清楚为什么模型中的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中,这可以正常工作。
我会承认,即使我已经阅读了整本关于活动系统的书,有些我还没有完全掌握它,所以我可能会遗漏一些东西?
感谢。
答案 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
事件侦听器