2017-08-18 2 views
2

Ich bin mit Symfony 2.3Symfony2: Ändern Dropdown-Werte basierend auf einem anderen Feld Wert

Ich habe ein Formular, in dem ein Benutzer einen Zustand auswählt und eine Stadt (beide mit Dropdown-Listen).

Es funktioniert wie erwartet, aber ich würde leben, um Städte basierend auf einem ausgewählten Zustand durch den Benutzer zu zeigen. Grundsätzlich ist die Form, wie dies funktioniert:

Seite 1: Der Benutzer wählt einen Zustand

Seite 2:. Der Benutzer wählt eine Stadt (In diesem Punkt ist das Statusfeld gesperrt ist, und kann nicht geändert werden Benutzer kann sich nur ändern Städte)

Also wie kann ich von der Datenbank den Statuswert abrufen und dann auf Seite 2 verwenden, um nur die Städte dieses Bundesstaates anzuzeigen, ohne Ajax zu verwenden.

Staatsform:

->add('state', 'entity', array(
"label" => 'Name of the state(*): ', 
'class' => 'PrincipalBundle:State', 
"attr" => array('class' => 'control-group', 'style' => 'width: 50%', 'rows' => '1'), 
"property"=>"statename")) 

Hier ist die Stadt Form:

->add('city', 'entity', array(
"label" => 'City Name (*): ', 
'class' => 'PrincipalBundle:Cities', 
"attr" => array('class' => 'control-group', 'style' => 'width: 50%', 'rows' => '1'), 
"property"=>"cityname")) 

Ich kann kein Ereignis-Listener verwenden. Ich habe versucht, die Dokumente zu folgen, aber ich habe diesen Fehler:

The 'choices_as_values' is not declared

Ich denke, es liegt an der Version von Symfony. Ich kann die Version auch nicht upgraden, zumindest noch nicht.

Antwort

1

Sie können auf jeden Fall einen Event-Listener verwenden. Es scheint, als wäre Ihr einziger Fehler in Bezug auf choices_as_values. Das war introduced in 2.7 zu imitieren, wie choices verwendet, um zu arbeiten. In Symfony 2.7 the keys/values flipped für die Funktionsweise der choices Array, so dass sie choices_as_values für die Abwärtskompatibilität hinzugefügt (Sie setzen es auf true, um auf die alte Weise zu funktionieren).

Alles, was Sie tun müssen, ist die choices_as_values Einstellung zu entfernen, und Sie sollten gut gehen. Stellen Sie nur sicher, dass die Schlüssel der Elementwert sind und die Werte, die dem Benutzer angezeigt werden sollen.

In Symfony 2.3:

$builder->add('gender', 'choice', array(
    'choices' => array('m' => 'Male', 'f' => 'Female'), 
)); 

Equivalent Symfony 2.7:

$builder->add('genre', 'choice', array(
    'choices' => array('m' => 'Male', 'f' => 'Female'), 
    'choices_as_values' => false, 
)); 

auch äquivalente in Symfony 2.7:

$builder->add('genre', 'choice', array(
    'choices' => array('Male' => 'm', 'Female' => 'f'), 
    'choices_as_values' => true, 
)); 

Equivalent in Symfony 3.0:

+0

Nun, das habe ich schon gemacht, aber die Auswahlmöglichkeiten werden nicht angezeigt. –

+0

Interessant - erhalten Sie immer noch den gleichen Fehler? Meine Antwort sollte das zumindest für Sie gelöst haben ... Wenn Sie etwas erhalten, das danach nicht angezeigt wird, klingt es, als ob etwas anderes schief läuft (vielleicht modifizieren oder erstellen Sie eine neue Frage dafür). –

+0

Hallo! Ja, deine Antwort ist richtig! Habe es funktioniert, danke! –

Verwandte Themen