如何在 CRUD 控制器中使用 `postUpdate`?

How to use `postUpdate` in CRUD controllers?

我已经安装 SonataAdminBundle 并为一个实体创建了自定义 CRUD 控制器。我想在实体更新后执行一些操作。如何使用 CRUD 控制器实现此目的?我注意到,Admin* 类 有 preUpdatepostUpdate 方法用于此目的,我可以使用它们,但我想,该逻辑应该放在控制器中。

我认为最简单的方法是重写 editAction(在我的控制器中重写此方法,copy/paste 来自基础 CRUDController 的代码并添加调用自己的 postUpdate),但是copy/paste 不好 :) 也许我错过了一些方法?

如果您查看 CRUDController 中用 sonata admin 的 editAction() 编写的代码,您可以看到它调用 admin 的 update() 方法。

$object = $this->admin->update($object);

您可以在调用模型管理器以持久化对象之前查看 sonata base admin update() 中的 update() 方法它有一个 preUpdate() 调用和调用后 postUpdate() 的相同情况模特经理。

这意味着您要为您的实体实施 prepost 操作,您必须编写自己的逻辑,但问题是您为什么要重做或重写任何可用操作?您可以使用已经提供的 prepost 挂钩。