2017-02-07 10 views
0

Ich habe Formular mit Feldtyp entity auf diesem Feld habe ich query_builder, die Abfrage zurückgeben und 'property' => 'name',. Und meine Frage, was in Datentransformator für Änderung tun muss, wählen Sie Namen, müssen kompliziert mit mehreren abgelegt, Beispiel - name_address_office. Mit 2,8 Symfony muss ich dataTransformer AnsatzSymfony Form Typ Einheit Daten Transformator

meine Form

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)); 
} 

und meine 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 ''; 
     } 
    } 
} 

in Transformationsfunktion $issue haben null und wenn Rückkehr '' nichts ändern in Form, haben noch 'property' => 'name', auf Wahl, was im Datenumwandlungsnamen tun muss?

dies jetzt habe ich

enter image description here

und das, was ich brauche

enter image description here

müssen Name mehrerer Teile

UPDATE

Ok. Ich habe Auswahlfeld vat und ich brauche Daten in der Wahl für MwSt-Feld wie - aus einigen Entity-Feld, Beispiel-Entity Location (ID, Name)

Wie dies mit DataTransformer realisiert?

+0

Ein Datentransformator ist hier wahrscheinlich nicht die richtige Lösung. Was willst du eigentlich erreichen? Und welche Symfony-Version verwendest du? Überprüfen Sie auch die ['Choice_label'] (https://symfony.com/doc/current/reference/forms/types/choice.html#choice-label) und [' choice_value'] (https://symfony.com/ doc/current/Referenz/Formulare/types/choice.html # Auswahl-Wert) Optionen. – Yoshi

+0

Symfony 2.8 Ich brauche den DataTransformer-Ansatz –

+0

Momentan gibt es nichts in Ihrer Frage, was darauf schließen lässt, dass Sie * einen Datentransformator * brauchen * müssen. Wenn Sie einfach 'choice_label' mit einem Callback verwenden, wird das gleiche Ergebnis erzielt. Also füge bitte hinzu, warum du denkst, dass du einen Datentransformator brauchst. Für den Moment sieht das so aus, als ob Sie es einfach benutzen wollen, weil Sie nicht wissen, wie Sie Ihr tatsächliches Problem lösen können. – Yoshi

Antwort

1

Implementieren Sie eine __toString() Methode in Ihre Entität, die den gewünschten Namen zurückgibt.

Dann entfernen Sie die Eigenschaft von QueryBuilder, dies wird die automatische Verwendung der to_string() Methode der Klasse verursachen.

+0

ok, thnks, aber ich brauche Ansatz mit dataTransform, weil in Dieser Transformator möchte ich etwas Logik hinzufügen –