如何在EasyAdmin Bundle中动态设置编辑页标题?%firstname%不生效
解决EasyAdmin编辑页面标题无法动态显示用户名的问题
嘿,我之前也碰到过这个情况!EasyAdmin默认的标题占位符(比如%entity_label%这类)是预定义好的,并不支持直接用%firstname%这种实体属性名作为占位符,所以我们得换几种方式来实现动态显示当前编辑用户的名字。
问题回顾
你当前的config.yml配置是这样的:
edit: title: 'editing %firstname% ' fields: - {property: firstname, type: string} - {property: lastname, type: string} - {property: email, type: string} - {property: password,type: password} - {property: mobilenumber, type: string} - enabled
下面给你三种可行的解决方法,按简单程度排序:
方法一:使用Symfony表达式语言(最简便)
EasyAdmin支持在标题中直接使用Symfony的表达式语言,你只需要把标题改成用{{ entity.属性名 }}的格式:
edit: title: 'editing {{ entity.firstname }}' fields: - {property: firstname, type: string} - {property: lastname, type: string} - {property: email, type: string} - {property: password,type: password} - {property: mobilenumber, type: string} - enabled
这里的entity就是当前正在编辑的实体对象,EasyAdmin会自动解析这个表达式,把{{ entity.firstname }}替换成实际的用户名字。
方法二:自定义编辑页面模板
如果表达式的方式满足不了你的复杂需求,比如要添加更多动态内容,可以自定义编辑页面的模板:
- 在你的项目模板目录下创建
templates/admin/edit.html.twig文件,内容如下:
{% extends '@EasyAdmin/crud/edit.html.twig' %} {% block page_title %} editing {{ entity.firstname }} {% endblock %}
- 然后在
config.yml里指定使用这个自定义模板:
edit: template: 'admin/edit.html.twig' fields: - {property: firstname, type: string} - {property: lastname, type: string} - {property: email, type: string} - {property: password,type: password} - {property: mobilenumber, type: string} - enabled
方法三:使用事件监听器(最灵活)
如果需要更复杂的逻辑来生成标题,比如根据用户角色显示不同内容,可以通过监听EasyAdmin的事件来实现:
- 创建事件监听器类
src/EventListener/EasyAdminEditTitleListener.php:
namespace App\EventListener; use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeCrudActionEvent; use EasyCorp\Bundle\EasyAdminBundle\Event\EasyAdminEvents; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class EasyAdminEditTitleListener implements EventSubscriberInterface { public static function getSubscribedEvents() { return [ EasyAdminEvents::PRE_EDIT => 'onPreEdit', ]; } public function onPreEdit(BeforeCrudActionEvent $event) { $entity = $event->getEntityInstance(); $crudController = $event->getCrudController(); // 这里可以添加任意逻辑,比如拼接名字和姓氏 $title = 'editing ' . $entity->getFirstname() . ' ' . $entity->getLastname(); $crudController->setPageTitle('edit', $title); } }
- 在
services.yml中注册这个监听器:
services: App\EventListener\EasyAdminEditTitleListener: tags: - { name: kernel.event_subscriber }
内容的提问来源于stack exchange,提问作者Megumin
相关产品推荐
相关产品推荐

