2017-08-08 2 views
0

Für dieses Beispiel in Formular eingereicht, sagen wir, ich habe eine Vehicle Entität, die die folgenden Werte haben kann:Symfony: Satzfelder als null, wenn nicht

  • Type: Fahrrad, Motorrad, Auto
  • Fuel: integer

Ich erstelle ein neues Fahrzeugobjekt über ein dynamisches Formular. Bitte beachten Sie, dass das Feld "Kraftstoff" nicht angezeigt wird, wenn das Feld type als "Fahrrad" eingestellt ist.

Ich kann erfolgreich diese Form dank Symfony Dokumentation als einige Javascript erstellen:

<?php 


$formModifier = function (FormInterface $form, $fields = null, array $options) { 
    foreach ($fields as $field_id => $field_value) { 
     if ($field_id == 'type') { 
      if ($field_value && $field_value == 'bicycle') { 
       $form->remove('gas'); 
      } elseif ($field_value && $field_value == 'motorbike') { 
       $form->add('gas'); 
      } elseif ($field_value && $field_value == 'car') { 
       $form->add('gas'); 
      } 
     } 
    } 
}; 

$builder->addEventListener(
    FormEvents::PRE_SUBMIT, 
    function (FormEvent $event) use ($formModifier, $options) { 
     $formModifier($event->getForm(), $event->getData(), $options); 
    } 
); 
$builder->addEventListener(
    FormEvents::PRE_SET_DATA, 
    function (FormEvent $event) use ($formModifier, $options) { 
     $vehicule = $event->getData(); 

     $formModifier($event->getForm(), array(
      'type' => $vehicule->getType(), 
     ), $options); 
    } 
); 

$builder->add('type', ChoiceType::class, array(
    'choices' => array(
     'Bicycle' => 'Bicycle', 
     'Motorbike' => 'Motorbike', 
     'Car'  => 'Car', 
    ), 
)); 

Die Daten werden dann mit Lehre anhielt.

Es gibt jedoch ein Problem, wenn ich dieses Formular bearbeite, wenn die Entität in der Datenbank bereits ein definiertes Gas hat.

Zum Beispiel:

  1. Entity in der Datenbank ist ein Motorbike mit gas = 10.
  2. Ich möchte das Formular bearbeiten. Die Seite zeigt mir zwei Felder mit Typ und Gas. 3. Ich wähle dann "Fahrrad". Das Feld "Gas" verschwindet.
  3. Ich reiche das Formular ein. Das Attribut Type ist aktualisiert und hat jetzt den Wert Bicycle. Aber nicht das Attribut Gas, das bleibt bei 10.

Wie kann ich das Gasattribut in diesem Fall auf Null setzen?

+0

Sie Ihre Frage bearbeitet haben, aber nichts über meine Antwort sagen ... Hat es geholfen? – Veve

Antwort

0

ein Formular senden Event hinzufügen:

$builder->addEventListener(FormEvents::SUBMIT, function(FormEvent $event){ 
    $data = $event->getData(); 

    if($data['type'] == 'Bicycle'){ 
     $data['gas'] = 0; //Note that in your entity, this field is named 'fuel'... 
    } 
    $event->setData($data); 
}); 
Verwandte Themen