我在Symfony项目中使用Sonata admin。用户存储在 User 实体中,我为用户提供了管理其用户详细信息作为其个人资料的规定。配置文件更新后,Flash消息看起来像
但是消息对我来说似乎很奇怪。如何将该消息更改为个人资料更新成功之类的内容?是否可以处理 UserAdmin 类中与 User 相关的Flash消息?
任何建议/解决方案都会有所帮助。在此先感谢!
答案 0 :(得分:0)
您可以在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";
}
答案 1 :(得分:0)
我已经覆盖了翻译文件,以更改所有实体操作共有的Flash消息。
我刚刚从
复制了 SonataAdminBundle.en.xliff 文件/ vendor / sonata-project / admin-bundle / src /资源/翻译/
并将其放在 src / Resources / SonataAdminBundle / translations 或 / translations 中,然后根据需要编辑消息。