【问题标题】:Customise flash message of Sonata AdminSonata Admin的自定义Flash消息
【发布时间】:2018-12-25 23:39:58
【问题描述】:

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

但这条消息对我来说看起来很奇怪。如何将此消息更改为 个人资料已成功更新?是否可以处理来自 UserAdmin 类的 User 相关 Flash 消息?

任何建议/解决方案都会有所帮助。提前致谢!!

【问题讨论】:

    标签: php symfony sonata-admin sonata


    【解决方案1】:

    正如您在 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";
    
    }
    

    【讨论】:

    • 你能建议在 baseController 中必须实现什么吗?覆盖 EditAction??
    【解决方案2】:

    我已经覆盖了翻译文件以更改所有实体操作共有的 Flash 消息。

    我刚刚从

    复制了 SonataAdminBundle.en.xliff 文件

    /vendor/sonata-project/admin-bundle/src/Resources/translations/

    并将其放在 src/Resources/SonataAdminBundle/translations/translations 中,然后根据需要编辑消息。

    【讨论】:

      猜你喜欢
      • 2013-09-06
      • 2018-07-22
      • 2016-01-22
      • 2017-09-02
      • 2013-12-19
      • 2019-03-17
      • 1970-01-01
      • 2016-06-25
      • 2018-07-11
      相关资源
      最近更新 更多