根据Sonata源代码,breadcrumb中的最后一个节点以这种方式呈现:
# standard_layout.html.twig #
<li class="active"><span>{{ menu.label }}</span></li>
在我的设置中,当打开给定的Admin子类时,根据Admin管理的实体,最后一个节点只是变成一个原始字符串:
Dashboard / Entity List / Acme\SomeBundle\Entity\Stuff:000000001d74ac0a00007ff2930a326f
如何设置menu.label的值以获得更合适的效果?我已经在我的Admin子类中尝试覆盖以下内容:
protected function configureTabMenu(MenuItemInterface $menu, $action, AdminInterface $childAdmin = null) {
$this->configureSideMenu($menu, $action, $childAdmin);
}
protected function configureSideMenu(MenuItemInterface $menu, $action, AdminInterface $childAdmin = null) {
$menu->setLabel("Some nice label");
$menu->setName("Some nice name");
}
但是,即使我已经验证在运行时调用上述方法,这也不会改变任何内容。
答案 0 :(得分:2)
最后找到了一个很好的(并且有点明显)解决方案。
Sonata Admin类使用内部toString($ object)方法来获取正在处理的实体的标签字符串。因此,关键是要实现相关实体的__toString()方法:
public function __toString() {
return "test";
}
答案 1 :(得分:1)
最好的方法是在Admin Class中配置$classnameLabel
变量:
class fooAdmin extends Admin
{
protected $classnameLabel = 'Custom Label';
}
但它有相同的问题(实体路径的奇怪名称),即使它在所有其他页面上都正常工作。
答案 2 :(得分:0)
显然,索纳塔解决这个问题的方法在这里显示:
引用:
虽然SonataAdminBundle非常友好地通知管理员成功创建,但是类名和某种哈希值并不是很好阅读。这是SonataAdminBundle中对象的默认字符串表示形式。 您可以通过在Admin类中定义toString()(注意:无下划线前缀)方法来更改它。这将接收要转换为字符串的对象作为第一个参数: