2017-04-24 1 views
0

Lorsque vous créez un formulaire normal, vous pouvez avoir plusieurs cases à cocher qui fonctionnent comme un tableau. Exemple:Silex: utiliser les cases à cocher comme tableau dans Formbuilder

<form action="/action_page.php" method="get"> 
    <input type="checkbox" name="vehicle" value="Bike"> I have a bike<br> 
    <input type="checkbox" name="vehicle" value="Car" checked="checked"> I have a car<br> 
    <input type="submit" value="Submit"> 
</form> 

Cela vous donne la possibilité de dire:

Donne-moi al les cases cochées avec le nom du véhicule

Cela pourrait être juste le vélo ou tout simplement la voiture, mais il peut aussi être que les deux sont sélectionnés. Vous pouvez les parcourir et faire quelque chose avec les données. Cependant, lorsque j'essaie de faire quelque chose comme ça, Silex FormServiceProvider ne me permet pas de faire quelque chose comme ça.

Dans mon cas, j'utiliser ces lignes de code:

foreach($user->data() as $player){ 
     $builder->add('player', CheckboxType::class, [ 
        'constraints' => array(new Assert\NotBlank()), 
        'label' => $player->username, 
        'attr' => array('class' => 'input-field', 'value' => $player->username), 
        'label_attr' => array('class' => 'label') 
      ]); 
    } 

Une case à cocher est faite pour tous les joueurs dans le jeu. Je peux choisir si je veux ou non les ajouter à une équipe.

Ainsi, après l'envoi du formulaire, je voudrais pouvoir faire quelque chose comme ceci:

$data = $form->getData(); 
foreach($data['player'] as $checked){ 
    //Add to the team 
} 

Quelqu'un peut-il me expliquer comment faire en Silex?

Répondre

0

J'ai trouvé ma solution. J'ai utilisé le mauvais type d'entrée. Quand j'utilise le type de choix. Cela fonctionne très bien:

$players = []; 
foreach($user->data() as $player){ 
    $array = array($player->username => $player->username); 
    array_push($players, $array); 
} 

$builder->add('player', ChoiceType::class, [ 
     'constraints' => array(new Assert\NotBlank()), 
     'choices' => $players, 
     'choice_attr' => function($val, $key, $index) { 
      return ['class' => 'input-field']; 
     }, 
     'multiple' => true, 
     'expanded' => true 
]);