Ich möchte Elemente dynamisch hinzufügen können, ohne dass sie in der Auswahloption für den EntityType-Formulartyp voreingestellt sind. Ich muss verfügbare Auswahl ändern, weil sonst invalid value
Fehler auftaucht.Dynamische Änderung von Formularvorgaben zur Gültigkeitsprüfung in symfony2
class MyImageType extends AbstractType {
public function __construct($em) {
$this->em = $em;
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(array(
'class' => 'stuff/MyImage',
'choice_label' => 'id',
'multiple' => true,
'choices' => [],
));
}
public function buildForm(FormBuilderInterface $builder, array $options) {
//
}
public function getParent() {
return EntityType::class;
}
}
und ich verwende es wie folgt aus:
$builder->add('images', 'stuff\MyImage\Form\Type\MyImageType')
die HTML erzeugt sieht wie folgt aus:
<select id="product_images" name="product[images][]" required="required" class="form-control" multiple="multiple">
</select>
ich Anrufe einige Ajax bin Ausführung Entität zu erstellen und fügen Sie die ID der Dropdown-Liste wie folgt:
<select id="product_images" name="product[images][]" required="required" class="form-control" multiple="multiple">
<option value="88" selected="selected">88</option>
</select>
88
ist vorhandene ID für vorhandene Entität.
Wenn ich das Formular danach einsende, erscheint invalid value
Fehler, weil 88
nicht in der Voreinstellung choices
für diesen Entitätstyp ist. Also muss ich 88
in den verfügbaren Wahlen hinzufügen.
Wenn dies ein Kind einer Form (Symfony \ Component \ Formular \ Form) war, konnte ich dies auf FormEvents::PRE_SUBMIT
//..
$img = $em->findOneById(88);
$form->add('images', [
'class' => 'stuff/MyImage',
'choice_label' => 'id',
'multiple' => true,
'choices' => [$img],
]);
aber in meinem Fall möchte ich es in MyImageType
Klasse tun, die kapseln Klasse. Können Sie mir Anweisungen geben, wie es geht? Vielen Dank.
EDIT:
Im Prozess diese Frage des Schreibens ich eine Lösung für dieses Problem gefunden haben. Für den Fall, kann ich das Feld aktualisieren, wie so:
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use($em) {
$form = $$event->getForm();
$form->getParent()->add('images', EntityType::class, $options);
}
Noch will ich nicht meine eigene Frage beantworten, denn vielleicht gibt einen besseren Weg, es zu tun ist. Vielen Dank.
Haben Sie versucht, Wert mit Set-Methode des Objekts, bevor es an Ihr Formular übergeben? – DOZ
Ich schlug vor einiger Zeit eine ähnliche Lösung für einen Benutzer vor, der ein Problem wie Ihres hatte. http://stackoverflow.com/questions/27981609/symfony-adding-Element-to-form-collection-in-pre-submit-event/27982025#comment44356045_27982025 –