2016-12-01 122 views
0

我有了這個實體,其中包含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

回答

0

一種解決方法是爲奏鳴曲使用自定義列表塊。

  1. ​​稱爲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'; 
    } 
    
  2. 在你管理類,所需字段的模板設置爲新的樹枝模板:

    ->add('orderItems', null, array(
         'template' => 'AcmeBundle::order_items_list.html.twig' 
        )) 
    
  3. 而在您的新枝的模板(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 %}