2013-06-02 16 views
38

Symfony2 ile form oluşturucuyu kullanmaktayım ve oldukça hoş buluyorum. Arama sonuçlarını filtrelemek için üst kısımda bir dizi kutu içeren bir arama sayfası oluşturmak istiyorum. Şu an itibariyle üç farklı varlığım var (hakimler, tercümanlar, avukatlar). Kullanıcıların kısmi veya tam isimleri girmesini ve tüm varlıkları aramasını istiyorum. Gerçek arama kısmını halledebilirim, ancak form oluşturucu nesli bana sorun veriyor.Symfony2 - Herhangi Bir Varlık Olmadan Form Oluşturucu Kullanılıyor

Yapmaya çalıştığım şey, belirli bir varlığa bağlı olmayan bir form oluşturmaktır. Symfony sitesinde okuduğum tüm dersler ve belgeler, varsayılan olarak bir varlığa iliştirilmesi gerektiği gibi davranır. Sadece herhangi bir varlığa iliştirip eklememeliyim ve sadece her bir metin alanını mapped = false olarak ayarlamamı isterim, eğer bu sadece formun kendiliğinden kodlanması gereken bir durumsa veya form oluşturucu içinde bunu yapmanın bir yolu varsa .

cevap

77

FormType kullanmayın ve Form Builder'ı kullanmak için bir öğe eklemeniz gerekmez. Bunun yerine bir dizi kullanın. Muhtemelen Symfony'nin belgelerinde bu küçük bölümü gözardı: http://symfony.com/doc/current/form/without_class.html

<?php 
// inside your controller ... 
$data = array(); 

$form = $this->createFormBuilder($data) 
    ->add('query', 'text') 
    ->add('category', 'choice', 
     array('choices' => array(
      'judges' => 'Judges', 
      'interpreters' => 'Interpreters', 
      'attorneys' => 'Attorneys', 
     ))) 
    ->getForm(); 

if ($request->isMethod('POST')) { 
    $form->handleRequest($request); 

    // $data is a simply array with your form fields 
    // like "query" and "category" as defined above. 
    $data = $form->getData(); 
} 
+0

oluşturmak için createNamedBuilder yöntemi kullanabilirsiniz. Mükemmel! Teşekkürler! –

+22

Bilgi için: '$ form-> bağlama ($ request)' şimdi ** kullanımdan kaldırılmıştır **, şimdi '$ form-> handleRequest ($ request)' kullanmalısınız. –

+2

Symfony 3 için alan türlerinin sınıf adı ve bir takma ad olması gerektiğini unutmayın. Yani '-> ekle ('sorgu', 'metin')' '-> ('sorgu', 'TextType :: class') ekleyin ve 'Symfony \ Component \ Form \ Extension \ Core \ Type \' ı kullanmayı unutmamalısınız TextType' – dnagirl

7

Ayrıca ben o ardı yaptığını düşünüyorum formu

$form = $this->get('form.factory')->createNamedBuilder('form', 'form') 
      ->setMethod('POST') 
      ->setAction($this->generateUrl('upload')) 
      ->add('attachment', 'file') 
      ->add('save', 'submit', ['label' => 'Upload']) 
      ->getForm(); 
İlgili konular