Symfony 2-Forme Type D'entité: comment formater la liste déroulante générée?

j'ai un formulaire qui affiche un menu déroulant des catégories à choisir.

ces catégories sont configurées en utilisant L'Extension Gedmo Tree, de sorte qu'une catégorie peut avoir des catégories enfants.

j'ai une requête personnalisée dans le générateur de formulaire qui sélectionne uniquement les catégories qui appartiennent à un groupe spécifique. Cependant, je dois pouvoir montrer dans la liste déroulante quelles catégories sont les parents et quels sont les enfants, par exemple

Parent Category 1
  -- Child Category A
  -- Child Category B
Parent Category2
  -- Child Category C

une idée de comment je peux y arriver?

en outre, Comment puis-je passer une variable à mon query_builder, à partir du contrôleur qui appelle le formtype?

1
demandé sur j0k 2012-04-27 17:21:45

3 réponses

si vous n'avez pas besoin de sélectionner le parent, vous pouvez utiliser la balise optgroup

<select>
    <optgroup label="Category 1">
        <option>Option 1...</option>
        <option>Option 2...</option>
        <option>Option 3...</option>
    </optgroup>
    <optgroup label="Category 2">
        <option>Option 1...</option>
        <option>Option 2...</option>
        <option>Option 3...</option>
    </optgroup>
</select>

Edit:

Symfony 2 supporte la balise optgroup avec les tableaux (non testé, peut contenir des erreurs) :

public function buildForm(FormBuilder $builder, array $options)
{
    $category_choices = array(
        array('Category 1' => array(
            '1' => 'Option 1...',
            '2' => 'Option 2...',
            '3' => 'Option 3...'
        )),
        array('Category 2' => array(
            '4' => 'Option 4...',
            '5' => 'Option 5...'
        ))
    );

    $builder->add('category_list', 'choice', array(
        'label' => 'Category',
        'choices' => $category_choices
    ));
}
1
répondu ilanco 2012-05-01 10:13:17

il y A quelques jours, je cherchais à accomplir exactement la même chose ! J'ai utilisé la solution Neurofr ici. : Symfony2, arbre Doctrine Extensions: Generating a "tree" - like dropdown sélectionner la liste

et c'est du travail. Maintenant, je vais essayer de désactiver toutes les options qui ont eu les derniers enfants de l'arbre.

1
répondu MichaelL 2017-05-23 12:25:17

Étendre Symfony\Bridge\Doctrine\Form\ChoiceList\EntityChoiceList et de l'utiliser dans formBuilder, par ex:

$formBuilder
      ->add('parent', 'entity',
            array(
              'label' => 'Parent',
              'em' => $em,
              'class' => 'w3des\Bundle\SiteBundle\Entity\Menu',
              'choice_list' => new MenuChoiceList($em, $group, $cfg['tree']),
              'required' => false,
              'empty_value' => '----'
            ));

Vous devez remplacer: getEntity(), getEntities(), getIdentifierValues() et probablement constructeur de trop

0
répondu zulus 2012-06-17 11:13:21