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?
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
));
}
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.
É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