2014-03-13 6 views
7

Ich habe eine Event Einheit, wo Einheiten von People teilnehmen können. Nach einer Veranstaltung setzt sich der Gastgeber der Veranstaltung hin und soll mit einem solchen Formular präsentiert werden.Symfony Form Design

  user a user b  user c  user d  user e user f  user g 
user a  _ 
user b    _ 
user c       _ 
user d          _ 
user e             _ 
user f               _ 
user g                  _ 

Alle Leerzeichen sind Kontrollkästchen, ob ein Benutzer einen anderen Benutzer mag. Unterstriche sind deaktiviert, da ein Benutzer sich nicht selbst mögen kann. Sollte ich eine Choice_list verwenden? Ich möchte den Eingang wie folgt verarbeiten:

foreach(guests as guest)//horizontal 
{ 
    foreach(guests as other)//vertical 
    { 
     if(guest != other && guest.likes(other) && other.likes(guest)) 
     { 
      //do something 
     } 
    } 
} 

Wie würde ich den Formbuilder verwenden, um so etwas zu erreichen?

+0

Müssen Sie nur Formular generieren? Wird diese Form irgendeine Entität beeinflussen? Konkretisieren Sie Ihr Problem. –

+0

Dieses Formular wirkt sich auf die Person "People" aus. Dies hat keine Auswirkungen auf die Entität "Event". –

Antwort

1

Passt diese Form nicht zu Ihren Anforderungen?

$userIDsArray = $userIDsArray = array('1' => 'name1','2' => 'name2','3' => 'name3','4' => 'name4'); 

$form = $this->createFormBuilder($initialData); 
    foreach($userIDsArray as $userId) 
     $form->add($userId, 'choice', array(
         'choices' => $userIDsArray, 
         'multiple' => true, 
         'expanded' => true 
        ) 
       ); 
$form = $form->getForm(); 

Für diese Reihe von Benutzern, für Benutzer 1 alle anderen drei Benutzer und für den Benutzer nur 3 der vierten Überprüfung wird das Ergebnis wie folgt herzustellen.

array (size=4) 
    'name1' => 
    array (size=3) 
     0 => int 2 
     1 => int 3 
     2 => int 4 
    'name2' => 
    array (size=0) 
     empty 
    'name3' => 
    array (size=1) 
     0 => int 4 
    'name4' => 
    array (size=0) 
     empty 

Wenn Sie das Formular machen Sie jedes Element in Form iterieren und dann für jedes Element können Sie jede Auswahl iterieren und deaktivieren Sie die, die Sie wollen:

{% for formWidget in classForm %} 
    {{ form_label(formWidget) }} 
    {% for child in formWidget %} 
     {{ form_widget(child) }}</td> 
    {% endfor %} 
{% endfor %} 

Natürlich können Sie Verwenden Sie verschiedene Arrays für Zeilen in Form und für Auswahlmöglichkeiten, um die gewünschte Struktur zu implementieren.