2015-03-10 2 views
2

Je travaille avec le Sonata AdminBundle et je voudrais régler la valeur sélectionnée de ma liste de sélection .Régler la valeur sélectionnée sur le champ de l'entité (Symfony Forms)

J'ai un Catégorie avec champs: CategoryID, parentID, tag. L'ID parent peut être NULL.

Le code que je construis ma forme:

// Fields to be shown on create/edit forms 
protected function configureFormFields(FormMapper $formMapper) 
{   
    // If edit -> get tag and id from tag 
    if($this->subject->getCategoryId() !== null) 
    { 
     $tag_current = $this->subject->getCategoryId()->getTag(); 
     $tag_current_id = $this->subject->getCategoryId()->getParentid()->getCategoryid(); 
    } 

    $formMapper 
     ->add('tag', 'text', array('label' => 'Tag')) 
     ->add('name', 'text', array('label' => 'Naam')) 
     ->add('nameEN', 'text', array('label' => 'Naam Engels', 'required' => false, 'data' => 'test')) 
     ->add('parentcategory', 'entity', array(
      'class' => 'DX\MyBundle\Entity\Category', 
      'empty_data' => null, 
      'empty_value' => "GEEN PARENT CATEGORIE", 
      'required' => false, 
      'data' => $tag_current_id, 
      'query_builder' => function(EntityRepository $er) use ($tag_current) { 

       return $er->createQueryBuilder('c') 
        ->where('c.parentid IS NULL') 
        ->andWhere('c.tag != :tag') 
        ->andWhere('c.tag != :tag_current') 
        ->setParameter('tag', 'FOTOGRAAF') 
        ->setParameter('tag_current', $tag_current); 
      } 
     )) 
    ; 
} 

Comme vous le voyez, je l'ai essayé de définir propriété data sans résultat. La valeur vide NO PARENT CATEGORY est toujours sélectionnée au chargement de la page.

Mon $tag_current_id est un entier, dans ce cas: 11. Et ma liste de sélection ressemble à ceci:

<select id="s54ff22c20ca39_parentcategory" name="s54ff22c20ca39[parentcategory]" class="select2-offscreen" tabindex="-1" title="Parentcategory"> 
    <option value="">GEEN PARENT CATEGORIE</option> 
    <option value="1">THEMA</option> 
    <option value="11">FREEM SELECTIE</option> 
</select> 

Mais toujours pas sélectionné. Qu'est-ce que je fais mal?

Répondre

1

Votre constructeur de requête doit retourner toutes les valeurs disponibles, il sélectionnera automatiquement la valeur de votre base de données:

$formMapper->add('parentcategory', 'entity', array(
    'class' => 'DX\MyBundle\Entity\Category', 
    'empty_data' => null, 
    'empty_value' => "GEEN PARENT CATEGORIE", 
    'required' => false, 
    'query_builder' => function(EntityRepository $er) { 
     return $er->createQueryBuilder('c') 
        ->where('c.parentid IS NULL') 
        ->andWhere('c.tag != :tag') 
        ->setParameter('tag', 'FOTOGRAAF') 
    } 
)) 

Mise à jour:

C'est ce que je fais dans mon projet:

$formMapper->add('supplier', 'entity', array(
    'class' => 'AcmeCoreBundle:ShopSupplier', 
    'empty_value' => 'None', 
    'empty_data' => null, 
    'query_builder' => function(EntityRepository $er) { 
     return $er->createQueryBuilder('ss') 
      ->orderBy('ss.name', 'ASC'); 
    } 
)) 

Il sélectionne automatiquement la valeur de la base de données et définit la valeur empty_value lorsqu'aucun n'est sélectionné. Si ça ne marche pas dans votre projet, je n'en ai aucune idée.

+0

Ensuite, il sélectionne toujours la valeur vide. Et il est important que ma catégorie ne soit pas dans la liste de sélection, c'est pourquoi j'ai mon second "andWhere" – nielsv

+0

Dans mon cas, 'empty_value' était la façon de définir la valeur par défaut (sans se soucier de l'injection, de l'index ni des choix) . Merci mec! – nicolallias