Настроить флэш-сообщение Sonata Admin

Я использую администратора Sonata в своем проекте Symfony. Пользователи хранятся в сущности Пользователь, и я предоставил пользователям возможность управлять своими данными пользователя в качестве своего профиля. При обновлении профиля всплывающее сообщение выглядит так:

Настроить флэш-сообщение Sonata Admin

но сообщение кажется мне странным. Как я могу изменить это сообщение на что-то вроде Профиль успешно обновлен? Можно ли обрабатывать флэш-сообщения, связанные с Пользователь, из класса UserAdmin?

Любое предложение / решение будет полезным. Заранее спасибо!!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
848
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как вы можете видеть в 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";

}

Подскажите, что нужно реализовать в baseController? Переопределить EditAction ??

Vinoth Selvi 06.08.2018 10:40
Ответ принят как подходящий

Я переопределил файл перевода, чтобы изменить флэш-сообщения, которые являются общими для всех действий сущностей.

Я только что скопировал файл SonataAdminBundle.ru.xliff из

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

и поместите его в src / Resources / SonataAdminBundle / translations или / переводы и отредактируйте сообщения по своему усмотрению.

Другие вопросы по теме