正如您在 CrudController 中看到的,当更新操作成功时,对于每个实体,此代码都会运行:https://github.com/sonata-project/SonataAdminBundle/blob/3.x/src/Controller/CRUDController.php#L357:
$this->addFlash(
'sonata_flash_success',
$this->trans(
'flash_edit_success',
['%name%' => $this->escapeHtml($this->admin->toString($existingObject))],
'SonataAdminBundle'
)
);
所以如果你想覆盖它:
解决方案 1:
您更改每个实体的翻译...
解决方案 2:
您在使用您自己的特定于 UserEntity 的控制器时覆盖此 Flash 消息...
如果我是你,我将创建一个 baseController,以使这种翻译可定制,并且每个实体都将从中继承......
更新:
在 baseController 中,您覆盖每个操作(创建、删除、编辑)。
做出选择后,第一个:创建自定义操作,第二个,为翻译消息创建一个受保护的变量...
class OwnBaseController extends BaseController {
....
protected $successMessage = "flash_edit_success";
protected $errorMessage = "flash_edit_error";
....
/** Exemple with edit action **/
try {
$existingObject = $this->admin->update($submittedObject);
if ($this->isXmlHttpRequest()) {
return $this->renderJson([
'result' => 'ok',
'objectId' => $objectId,
'objectName' => $this->escapeHtml($this->admin->toString($existingObject)),
], 200, []);
}
$this->addFlash(
'sonata_flash_success',
$this->successMessage , // <----- LOOK HERE
'messages'
)
);
// redirect to edit mode
return $this->redirectTo($existingObject);
} catch (ModelManagerException $e) {
$this->handleModelManagerException($e);
$isFormValid = false;
} catch (LockException $e) {
$this->addFlash('sonata_flash_error', $this->trans($this->errorMessage, [ // <----- LOOK HERE
'%name%' => $this->escapeHtml($this->admin->toString($existingObject)),
'%link_start%' => '<a href="'.$this->admin->generateObjectUrl('edit', $existingObject).'">',
'%link_end%' => '</a>',
], 'SonataAdminBundle'));
}
class UserController extends OwnBaseController {
protected $successMessage = "user_edit_success_custom_message";
protected $errorMessage = "user_edit_error_custom_message";
}