我已经安装了SonataAdminBundle
并为一个实体创建自定义 CRUD 控制器。我想在实体更新后执行一些操作。如何使用 CRUD 控制器实现此目的?我注意到,Admin*
类都有preUpdate
和postUpdate
用于此目的的方法,我可以使用它们,但我想,逻辑应该放在控制器中。
我看到它的最简单的方法是重写editAction
(在我的控制器中覆盖此方法,从基本CRUDController
复制/粘贴代码并添加调用自己的postUpdate
),但复制/粘贴它很糟糕:)也许我错过了某种方式?
如果你在CRUDController
中查看用 sonata admin 的editAction()
编写的代码,你可以看到它的调用管理员的update()
方法。
$object = $this->admin->update($object);
在调用模型管理器以保留对象之前,您可以在 Sonata Base Admin 类中查看该方法update()
该方法,它在调用模型管理器后具有preUpdate()
调用和postUpdate()
的情况相同。
这意味着您尝试为实体实现pre
或post
操作的那个您必须编写自己的逻辑,但问题是为什么要重做或重写任何可用的操作? 您可以使用已经提供的pre
或post
钩子。