2016-03-30 7 views
1

Ich habe 2 Dokumente category und supplier und ein Formular erstellt von category. Ich habe eine verschachtelte Form category, die supplier einschließen. In supplier Ich habe ein boolesches Feld visible und ich möchte in der Lage sein, nur aus der Auswahlliste die supplier setzen auf sichtbar wahr.Symfony 3 Auswahlliste mit "sichtbaren" Einheit/Dokument

In meiner category Form habe ich versucht:

.... 
->add('suppliers', DocumentType::class, array(
      'class' => 'AppBundle:Supplier', 
      'choice_label' => function ($category) { 
       if ($category->getVisible == true) 
       return $category->getName() 

      }, 
.... 

Aber alles, was ich habe ist eine Auswahlliste mit 10 leeren Feldern (ohne Namen) und nur 1 Wahl mit einem Namen (weil nur diese Wahl gesetzt zu sichtbar wahr)

Irgendeine Idee?

Dank

Antwort

1

Ich glaube, Sie müssen die Entscheidungen selbst und nicht ihr Label filtern.

->add('suppliers', DocumentType::class, array(
    'class' => 'AppBundle:Supplier', 
    'query_builder' => function (EntityRepository $er) { 
     return $er->createQueryBuilder('c') 
      ->where('c.visible', :visible) 
      ->setParameter('visible', true); 
    }, 
    'choice_label' => function ($category) { 
     return $category->getName() 
    }, 
    // ... 
)) 

Hoffnung verstand ich Ihren Bedarf richtig:

Dies kann mithilfe einer benutzerdefinierten Abfrage als query_builder Option verwendet werden, durchgeführt.

+0

Ich denke, das ist ein guter Weg, es zu tun. Aber ich benutze Mongo, also habe ich: '-> hinzufügen ('Lieferanten', DocumentType :: Klasse, Array ( 'Klasse' => 'AppBundle: Lieferant', 'Query_Builder' => Funktion (DocumentRepository $ dr) { return $ dr-> createQueryBuilder ('Lieferanten') -> field ('visible') -> equals ('true'); }, ' Aber zurück leere Auswahlliste, ich bleibe diggin danke! – user2203384

+0

Be Vorsicht, du übergibst einen String '' true'' anstelle eines booleschen 'true', also ist es normal, dass du keine Ergebnisse bekommst. Benutze mongo oder mysql sollte in diesem Fall keinen Unterschied machen. – chalasr

+1

Ah musste ich nur entfernen einfaches Zitat zwischen "wahr". Jetzt funktioniert es, danke! – user2203384