Sonata Admin 的自定义闪信
Customise flash message of Sonata Admin
我在我的 Symfony 项目中使用 Sonata admin。用户存储在 User 实体中,我已经为用户提供了管理他们的用户详细信息作为他们的个人资料的规定。更新配置文件时,闪现消息看起来像,
但我觉得这条消息很奇怪。如何将此消息更改为类似 配置文件更新成功 的内容?是否可以处理来自 UserAdmin class 的 User 相关的 flash 消息?
任何 suggestion/solution 都会有所帮助。提前致谢!!
正如您在 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 的控制器时覆盖了这条闪现消息...
如果我是你,我将创建一个 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";
}
我已覆盖翻译文件以更改所有实体操作通用的即显消息。
我刚刚从
复制了SonataAdminBundle.en.xliff文件
/vendor/sonata-project/admin-bundle/src/Resources/translations/
并将其放在 src/Resources/SonataAdminBundle/translations 或 /translations 中,然后根据需要编辑消息。
我在我的 Symfony 项目中使用 Sonata admin。用户存储在 User 实体中,我已经为用户提供了管理他们的用户详细信息作为他们的个人资料的规定。更新配置文件时,闪现消息看起来像,
但我觉得这条消息很奇怪。如何将此消息更改为类似 配置文件更新成功 的内容?是否可以处理来自 UserAdmin class 的 User 相关的 flash 消息?
任何 suggestion/solution 都会有所帮助。提前致谢!!
正如您在 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 的控制器时覆盖了这条闪现消息...
如果我是你,我将创建一个 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";
}
我已覆盖翻译文件以更改所有实体操作通用的即显消息。
我刚刚从
复制了SonataAdminBundle.en.xliff文件/vendor/sonata-project/admin-bundle/src/Resources/translations/
并将其放在 src/Resources/SonataAdminBundle/translations 或 /translations 中,然后根据需要编辑消息。