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, AutoFuel
: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:
- Entity in der Datenbank ist ein
Motorbike
mitgas = 10
. - 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.
- Ich reiche das Formular ein. Das Attribut
Type
ist aktualisiert und hat jetzt den WertBicycle
. Aber nicht das AttributGas
, das bleibt bei10
.
Wie kann ich das Gasattribut in diesem Fall auf Null setzen?
Sie Ihre Frage bearbeitet haben, aber nichts über meine Antwort sagen ... Hat es geholfen? – Veve