自定义Sonata Admin的Flash消息

时间:2018-07-18 06:56:59

标签: php symfony sonata-admin sonata

我在Symfony项目中使用Sonata admin。用户存储在 User 实体中,我为用户提供了管理其用户详细信息作为其个人资料的规定。配置文件更新后,Flash消息看起来像

enter image description here

但是消息对我来说似乎很奇怪。如何将该消息更改为个人资料更新成功之类的内容?是否可以处理 UserAdmin 类中与 User 相关的Flash消息?

任何建议/解决方案都会有所帮助。在此先感谢!

2 个答案:

答案 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 中,然后根据需要编辑消息。