在 Sonata Admin 列表视图中显示不同的实体
Posted
技术标签:
【中文标题】在 Sonata Admin 列表视图中显示不同的实体【英文标题】:Showing different entities in Sonata Admin list view 【发布时间】:2017-04-15 14:19:40 【问题描述】:我有这个实体,它包含entityName
属性和entityId
属性:
/**
* @var string
*
* @ORM\Column(name="entityName", type="string", length=255)
*/
private $entityName;
/**
* @var integer
* @ORM\Column(name="entityId", type="integer")
*/
private $entityId;
我不想使用__toString()
函数显示此实体,而是想实际返回具有名称和ID 的实体。并在奏鸣曲管理列表视图中显示。
现在,这里是__toString
:
public function __toString()
return $this->entityName . ":" . $this->entityId;
应该返回类似:
public function __toString()
return $em->getRepository($this->entityName)->find($this->entityId);
我希望我已经很好地描述了我的问题。 tnx
【问题讨论】:
【参考方案1】:一种解决方法是为奏鸣曲使用自定义列表块。
create a new twig filter 称为entityFilter
,此过滤器会将奏鸣曲管理对象的 FQCN 转换为奏鸣曲生成的可读路由名称。喜欢admin_blablabla_show
:
public function entityFilter($entityName)
$str = str_replace('\\', '_', $entityName);
$str = str_replace('Bundle', '', $str);
$str = str_replace('_Entity', '', $str);
$str = 'Admin' . $str . '_Show';
return strtolower($str);
public function getName()
return 'my_extension';
在您的管理类中,将所需字段的模板设置为新的树枝模板:
->add('orderItems', null, array(
'template' => 'AcmeBundle::order_items_list.html.twig'
))
在您的新树枝模板 (order_items_list.html.twig) 中:
% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %
% block field %
<div>
% for item in object.orderItems %
% if entity(item.entityName) == 'admin_first_entity_show' %
% set foo = 'Apple ID' %
% elseif entity(item.entityName) == 'admin_second_entity_show' %
% set foo = 'Device Accessory' %
% else %
% set foo = 'Not defiend' %
% endif %
<a target="_blank" class="btn btn-default btn-xs" href=" path(entity(item.entityName), 'id': item.entityId) "><i class="fa fa-external-link"></i> foo </a>
% endfor %
</div>
% endblock %
【讨论】:
以上是关于在 Sonata Admin 列表视图中显示不同的实体的主要内容,如果未能解决你的问题,请参考以下文章
Sonata Admin + 在列表视图中显示所有项目(不是每页)
在 Sonata Admin 的列表视图(角色/权限)中编辑