2013-04-11 58 views
1

我想使用SonataAdmin顯示對象的某些字段。其中一個字段是數據庫中的整數(狀態),但我不想顯示整數,否則取決於此字段的值是特定的字符串。使用Sonata Admin顯示字段的問題 - Symfony 2.0

public function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper 
     ->addIdentifier('name') 
     ->add('notice') 
     ->add('start') 
     ->add('end') 
     ->add('status')    
    ; 
} 

這可能嗎?

第二個問題: 在同一個例子中,我想添加一個未映射到數據庫(人員)的字段,因爲這是用與其他對象相關的數據計算的。

public function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper 
     ->addIdentifier('name') 
     ->add('notice') 
     ->add('start') 
     ->add('end') 
     ->add('status') 
     ->add('people')   
    ; 
} 

我可以使用Sonata Admin嗎?

在此先感謝。

回答

4

感謝您的回答。但是,我一直在尋找互聯網上的信息,我發現了其他方式來做到這一點。您可以爲您的字段渲染特定的模板。在您的管理類,在configureListFields工作,你可以這樣做:

public function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper 
     ->addIdentifier('name') 
     ->add('notice') 
     ->add('start') 
     ->add('end') 
     ->add('status', 'string', array('template' => 'YourBundle:YourController:status_field.html.twig')) 
     ->add('Resources', 'string', array('template' => 'YourBundle:YourController:resources_field.html.twig')) 
} 

對於「身份」領域,status_field.html.twig模板將呈現如下:

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %} 

{% block field %} 
    <div> 
     {% if object.status == 0 %} 
      <strong>Inactivo</strong> 
     {% elseif object.status == 1 %} 
      <strong>Activo</strong> 
     {% endif %} 
    </div> 
{% endblock %} 

而對於我的第二個問題,同樣的解決方案是有效的。渲染爲「資源」字段將如下的模板:

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %} 

{% block field %} 
    <div> 
     <strong>{{ object.getResources|length }}</strong> 
    </div> 
{% endblock %} 

通過這種方式,對象被傳遞到模板,你可以使用它的方法來獲得您所需要的信息。在這種情況下,getResources()方法用於顯示其長度。

+0

作爲一個方面說明,在模板中,您還可以通過「admin」變量訪問Admin類。所以如果你需要做一些更復雜的事情,你可以把邏輯放在那裏,並把你的對象作爲參數傳遞。 – 2014-12-03 15:05:07

4

我想你最好的方法是在你的實體中創建自定義setter和getters。

例如你有實體用戶:

private $customState; // NOTE -> NO ORM MAPPING because you don't want an actual column 

public function setCustomState() { 
     if($this->state){ 
      $this->customState = 'yup!'; 
      return $this; 
     } 
     $this->customState = 'nope!'; 
     return $this; 
    } 

public function getCustomState() { 
      return $this->customState; 
     } 
相關問題