2016-03-19 4 views
0

Ich versuche, eine Auswahl Dropdown in Symfony mit dem Array-Wert einer Abfrage vor dem -> hinzufügen des Formular-Builders zu füllen. Ich kann nicht für das Leben von mir das tatsächliche Etikett oder den Wert erhalten, trotz der Tatsache, dass die Dump ($ Kategorien) die richtigen Werte zeigt. Das Dropdown wird nur mit 0,1,2 aufgefüllt. Die Kategorie enthält einen -> getName und einen -> getId, aber ich kann diese nicht referenzieren.Symfony Choices Label von Array

+0

Gibt es einen besonderen Grund für Sie, nicht den Entity-Formular-Typ zu verwenden? – Artamiel

+0

Ich habe das Konzept des 2. Parameters nicht ganz verstanden. Ich dachte "Wahl" war obligatorisch für eine Drop-Down-Liste, um als das Formularobjekt generiert werden. – Lee

+0

"entity" ist Teil des DoctrineBridge-Pakets und bietet zusätzliche Funktionen für den 'choice'-Typ und eine Menge Magie, die nicht in einem kurzen Kommentar erklärt werden kann. Btw, anstatt Ihre Kategorien durch '$ options' zu übergeben, da Sie' entity'-Typ verwenden, können Sie die zusätzliche Option 'query_builder' hinzufügen und den Callback zusammen mit Ihrer Anfrage übergeben - http://symfony.com/doc /current/reference/forms/types/entity.html#using-a-custom-query-for-the-entities – Artamiel

Antwort

1

Hier ist, wie ich dieses Problem gelöst habe. Ich ausgesondert die Abfrage aus dem Etikett mit einer Funktion:

->add('taskCategory','entity',array(
      'class'=>'AppBundle\Entity\Category', 
      'choices'=>$this->fillCategories($options), 
      'choice_value'=>'id', 
      'choice_label'=>'name', 

     )) 

Der „fillCategories“ -Funktion nur die Daten zurück, die erforderlich war. Der Schlüssel hier war, den Typ "entity" anstelle von "choice" im -> add anzugeben.

$categories = $em->getRepository('AppBundle:Category') 
     ->createQueryBuilder('t') 
     ->where('t.userCreate = :user_id') 
     ->andWhere('t.type = :catType') 
     ->setParameter('user_id',$userID) 
     ->setParameter('catType',$type) 
     ->getQuery() 
     ->getResult(); 

    return $categories; 
Verwandte Themen