如何在 CRUD 控制器中使用“postUpdate”


How to use `postUpdate` in CRUD controllers?

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

我看到它的最简单的方法是重写editAction(在我的控制器中覆盖此方法,从基本CRUDController复制/粘贴代码并添加调用自己的postUpdate),但复制/粘贴它很糟糕:)也许我错过了某种方式?

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

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

在调用模型管理器以保留对象之前,您可以在 Sonata Base Admin 类中查看该方法update()该方法,它在调用模型管理器后具有preUpdate()调用和postUpdate()的情况相同。

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