Я использую администратора Sonata в своем проекте Symfony. Пользователи хранятся в сущности Пользователь, и я предоставил пользователям возможность управлять своими данными пользователя в качестве своего профиля. При обновлении профиля всплывающее сообщение выглядит так:
но сообщение кажется мне странным. Как я могу изменить это сообщение на что-то вроде Профиль успешно обновлен? Можно ли обрабатывать флэш-сообщения, связанные с Пользователь, из класса UserAdmin?
Любое предложение / решение будет полезным. Заранее спасибо!!






Как вы можете видеть в 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.ru.xliff из
/ vendor / sonata-project / admin-bundle / src / Resources / translations /
и поместите его в src / Resources / SonataAdminBundle / translations или / переводы и отредактируйте сообщения по своему усмотрению.
Подскажите, что нужно реализовать в baseController? Переопределить EditAction ??