Ich habe zwei Auswahlfelder, eines davon abhängig vom anderen.Ein dynamisch gefülltes Auswahlfeld validieren
Beim Erstellen des Formulars bekam das abhängige Feld ein leeres Auswahlfeld.
Ich fülle dieses Feld dann in JavaScript, um einige Daten von einer Aktion anzufordern.
Das Problem kommt von der Validierung. Natürlich wird es nicht bestanden, weil einzelne oder mehrere Werte nicht gegen leere Werte gültig sein können. Um das zu lösen, habe ich eine PRE_BIND
Listener erstellt, die im Grunde entfernen Sie dann das Auswahlfeld mit den richtigen Werten neu erstellen, aber es noch Validierung nicht bestanden.
$form->getErrors()
gibt nichts zurück $form->getErrorsAsString()
gibt mir einen Fehler auf meinem Auswahlfeld zurück.
Meine Form:
<?php
namespace Foo\BarBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class BarFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
// other fields
// This field is filled in ajax
$builder->add('stores', 'choice', array(
'label' => 'form.label.stores',
'translation_domain' => 'FooBarBundle',
'choices' => $options['storesList'],
'required' => false,
'multiple' => true,
'auto_initialize' => false,
'attr' => array(
'class' => 'chzn-select',
'placeholder' => 'form.placeholder.stores'
)));
$func = function (FormEvent $e) use ($options) {
$data = $e->getData();
$form = $e->getForm();
if ($form->has('stores')) {
$form->remove('stores');
}
$brand = isset($data['brand']) ? $data['brand'] : null;
if ($brand !== null) {
$choices = $options['miscRepo']->getStoresNameIndexedById($brand);
$choices = array_keys($choices);
$choices = array_map('strval', $choices);
} else {
$choices = array();
}
$form->add('stores', 'choice', array('choices' => $choices, 'multiple' => true, 'attr' => array('class' => 'chzn-select')));
};
$builder->addEventListener(FormEvents::PRE_SUBMIT, $func);
}
public function getName()
{
return 'bar_form_campaign';
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setRequired(array(
'storesList',
'miscRepo',
));
}
}
Welcher Fehler wird zurückgegeben? Beachten Sie, dass die Auswahlmöglichkeiten in den * Schlüsseln * des Arrays "Auswahl" enthalten sein müssen, nicht in den Werten. –
Was ist mit der Verwendung von "Entity" -Formular? http://symfony.com/doc/current/reference/forms/types/entity.html – gondo
Kannst du den Ajax schreiben, der das Formularelement "Stores" füllt? Welcher Fehler wird zurückgegeben? – jdharandas