简体   繁体   English

在Sonata管理员列表视图中显示不同的实体

[英]Showing different entities in Sonata Admin list view

I've got this entity, which contains entityName property and entityId property: 我有这个实体,其中包含entityName属性和entityId属性:

    /**
     * @var string
     *
     * @ORM\Column(name="entityName", type="string", length=255)
     */
    private $entityName;

    /**
     * @var integer
     * @ORM\Column(name="entityId", type="integer")
     */
    private $entityId;

Instead of showing this entity using __toString() function, I wanted to actually return the entity with name and id. 我没有使用__toString()函数显示该实体,而是想实际返回带有名称和ID的实体。 and show that in sonata admin list view. 并在索纳塔管理员列表视图中显示。

for now, here is __toString : 现在,这里是__toString

public function __toString()
{
    return $this->entityName . ":" . $this->entityId;
}

which should return something like: 应该返回如下内容:

public function __toString()
{
    return $em->getRepository($this->entityName)->find($this->entityId);
}

I hope that I've described my problem well. 我希望我已经很好地描述了我的问题。 tnx n

One workaround is to use custom list block for sonata. 一种解决方法是对奏鸣曲使用自定义列表块。

  1. create a new twig filter called entityFilter , this filter will convert FQCN of an sonata admin object to a readable route name generated by sonata. 创建一个名为entityFilter 的新树枝过滤器 ,该过滤器会将奏鸣曲管理对象的FQCN转换为奏鸣曲生成的可读路线名称。 like admin_blablabla_show : 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'; } 
  2. in you admin class, set the template of the desired field to a new twig template: 在您的管理类中,将所需字段的模板设置为新的树枝模板:

      ->add('orderItems', null, array( 'template' => 'AcmeBundle::order_items_list.html.twig' )) 
  3. And in your new twig template (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 %} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM