You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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 }}替换成实际的用户名字。

方法二:自定义编辑页面模板

如果表达式的方式满足不了你的复杂需求,比如要添加更多动态内容,可以自定义编辑页面的模板:

  1. 在你的项目模板目录下创建templates/admin/edit.html.twig文件,内容如下:
{% extends '@EasyAdmin/crud/edit.html.twig' %}

{% block page_title %}
    editing {{ entity.firstname }}
{% endblock %}
  1. 然后在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的事件来实现:

  1. 创建事件监听器类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);
    }
}
  1. 在services.yml中注册这个监听器:
services:
    App\EventListener\EasyAdminEditTitleListener:
        tags:
            - { name: kernel.event_subscriber }

内容的提问来源于stack exchange,提问作者Megumin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:49:43