如何为单个Crud Controller覆盖EasyAdmin默认Flash消息翻译?
修改EasyAdmin 4.6单个Crud Controller的删除Flash消息
不需要自定义Twig文件,直接在目标Crud Controller里做配置或重写方法即可,两种方案任选:
方案一:静态自定义消息(最简单)
在对应Crud Controller的configureCrud方法中,通过setFlashMessages覆盖删除成功的默认提示文本:
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; class YourEntityCrudController extends AbstractCrudController { // ... 其他默认代码 public function configureCrud(Crud $crud): Crud { return parent::configureCrud($crud) ->setFlashMessages([ // %entity_label% 是EasyAdmin内置占位符,会自动替换为当前实体的显示名称 Crud::FLASH_MESSAGE_DELETED => '【%entity_label%】已成功删除,数据无法恢复', ]); } // ... 其他默认代码 }
如果不需要动态占位符,直接写固定文本即可。
方案二:动态生成消息(适合个性化场景)
如果需要根据实体的具体属性生成提示(比如显示实体名称),可以重写deleteAction方法,手动控制Flash消息内容:
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController; use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface; class YourEntityCrudController extends AbstractCrudController { // ... 其他默认代码 public function deleteAction(Request $request, AdminUrlGenerator $adminUrlGenerator, CsrfTokenManagerInterface $csrfTokenManager): RedirectResponse { // 验证CSRF令牌(必须保留,保证安全) $this->checkCsrfToken($request, 'delete', $csrfTokenManager); // 获取要删除的实体ID和实体对象 $entityId = $request->query->get('entityId'); $entity = $this->getDoctrine()->getRepository(YourEntity::class)->find($entityId); // 执行删除操作 $entityManager = $this->getDoctrine()->getManager(); $entityManager->remove($entity); $entityManager->flush(); // 添加自定义Flash消息,这里可以用实体的任意属性拼接文本 $this->addFlash('success', "实体「{$entity->getTitle()}」已被成功删除"); // 重定向回当前Crud的列表页 $url = $adminUrlGenerator->setController(self::class)->setAction('index')->generateUrl(); return $this->redirect($url); } }
注意:如果你的项目使用了EasyAdmin的异步删除(默认是同步),需要额外注入MessageBusInterface并调用消息队列逻辑,否则直接用上面的同步删除代码即可。
内容的提问来源于stack exchange,提问作者jaba
相关产品推荐
相关产品推荐

