2017-02-07 78 views
0

我有這個字段的字段類型爲entity我有query_builder哪些返回查詢和'property' => 'name',。而我的問題在數據轉換器中需要做些什麼來更改選擇名稱,需要複雜的幾個字段,例如 - name_address_office。使用Symfony的2.8,我需要dataTransformer方法Symfony表單類型實體數據變換器

我的形式

class OutBoundInvoiceRowType extends AbstractType 
{ 
/** 
* @var array 
*/ 
private $vatClasses; 

/** 
* @var Container 
*/ 
private $container; 

/** 
* @var EntityManager 
*/ 
private $em; 

/** 
* OutBoundInvoiceRowType constructor. 
* @param Container $container 
* @param $vatClasses 
*/ 
public function __construct(
    Container $container,  
    $vatClasses 
) { 
    $this->container = $container; 
    $this->vatClasses = $vatClasses; 
    $this->em = $this->container->get('doctrine.orm.entity_manager'); 
} 

/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('location', 'entity', array(
      'class' => Location::class, 
      'property' => 'name', 
      'empty_value' => 'Choice Location', 
      'query_builder' => self::getLocations(), 
      'required' => false 
     ))   
     ->add('vat', ChoiceType::class, [ 
      'choices' => ?, 
      'required' => true, 
     ]) 
    $builder->get('vat') 
     ->addModelTransformer(new VatTransformer($this->container)); 
} 

和我VatTransformer:

class VatTransformer implements DataTransformerInterface 
{ 
    /** 
    * @var Container 
    */ 
    private $container; 

    /** 
    * @var EntityManager 
    */ 
    private $em; 

    /** 
    * LocationTransformer constructor. 
    * @param Container $container 
    */ 
    public function __construct(Container $container) 
    { 
     $this->container = $container; 
     $this->em = $this->container->get('doctrine.orm.entity_manager'); 
    } 

    /** 
    * 
    * @param Location|null $issue 
    * @return string 
    */ 
    public function transform($issue) 
    { 
     if (null === $issue) { 
      return ''; 
     } 
    } 
} 

函數變換$issuenull而當形式回報''沒有什麼變化,仍然有'property' => 'name',上選擇,數據轉換名稱需要做什麼?

這個現在我有

enter image description here

,這正是我所需要

enter image description here

需要的幾個部分名稱

UPDATE

好的。我有選擇字段vat,我需要構建數據在選擇增值稅領域像 - 從一些實體字段,示例實體位置(ID,名稱)

這是如何實現與dataTransformer?

+0

數據轉換器可能不是這裏的正確解決方案。你究竟想實現什麼?你使用的是什麼symfony版本。同時檢查['choice_label'](https://symfony.com/doc/current/reference/forms/types/choice.html#choice-label)和['choice_value'](https://symfony.com/ doc/current/reference/forms/types/choice.html#choice-value)選項。 – Yoshi

+0

Symfony 2.8我需要dataTransformer方法 –

+0

目前你的問題中沒有任何東西會暗示你需要一個數據轉換器。只需使用帶回調的'choice_label'就可以得到相同的結果。所以請添加爲什麼你認爲你需要一個數據轉換器。目前,這看起來像你只是想*使用它,因爲你不知道如何解決你的實際問題。 – Yoshi

回答

1

在您的實體中實施__toString()方法,該方法將返回所需的名稱。 Read more on the docs.

然後您從QueryBuilder中刪除該屬性,這將導致該類的to_string()方法的自動使用。

+0

好的,thnks,但我需要與dataTransform的方法,因爲在這個變壓器我想添加一些邏輯 –