2016-03-30 22 views
1

2 belge category ve supplier ve category tarafından oluşturulan bir form var. İç içe formsupplier içerir. supplier içinde bir boolean alanı var visible ve ben sadece seçim supplier görünür olarak görünür listeden seçmek mümkün olmak istiyorum. Sadece bu seçim ayarlandığı için ( Symfony "visible" varlık/belge ile 3 seçim listesi

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

      }, 
.... 

Ama tek şey bir adla (isimsiz) 10 boş alanlar ve sadece 1 seçim ile bir seçim listesi: Benim category formda

denedim görünür gerçek)

Herhangi bir fikrin var mı?

Teşekkür

cevap

1

Sana seçimler kendilerini ziyade etikete filtrelemek gerek.

Bu

query_builder seçenek olarak kullanılan özel bir sorgu kullanarak yapılabilir:

->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() 
    }, 
    // ... 
)) 

Umut Doğru ihtiyacını anladı.

+0

Bunun iyi bir yol olduğunu düşünüyorum. Ama ben mongo kullanıyorum, bu yüzden yaptım: '-> add ('tedarikçiler', DocumentType :: sınıf, dizi ( 'sınıf' => 'AppBundle: Tedarikçi', 'query_builder' => işlevi (DocumentRepository $ dr) { return $ dr-> createQueryBuilder ('Tedarikçiler') -> alan ('visible') -> eşittir ('true'); }, ' Ama boş seçim listesini döndür, kazanıma devam ediyorum – user2203384

+0

dikkatli olun, bir boolean 'true' yerine' 'true'' dizisini geçiriyorsunuz, bu yüzden sonuç almanız normaldir.Mongo kullanın ya da mysql bu durumda bir fark yaratmamalı. – chalasr

+1

Ah 'true' arasındaki basit alıntı.Şimdi çalışıyor, teşekkürler! – user2203384