2013-06-02 7 views
38

Ho utilizzato il generatore di moduli con Symfony2 e lo trovo molto carino. Mi trovo a voler creare una pagina di ricerca con una serie di caselle in alto per filtrare i risultati della ricerca. Ho tre entità diverse fin da ora (giudici, interpreti, avvocati). Vorrei che gli utenti potessero inserire nomi parziali o completi e farli cercare in tutte le entità. Posso gestire la parte di ricerca effettiva, ma la generazione del generatore di moduli è ciò che mi dà problemi.Symfony2 - Utilizzo di Form Builder senza alcuna entità collegata

Quello che sto cercando di fare è creare un modulo non associato a una particolare entità. Tutte le esercitazioni e la documentazione che ho letto sul sito Symfony agiscono come dovrebbero essere associate a un'entità per impostazione predefinita. Mi chiedo se dovrei semplicemente collegarlo a qualsiasi entità e impostare solo ogni campo di testo su mapped = false, se questa è un'istanza in cui dovrei semplicemente scrivere il codice direttamente nel modulo, o se c'è un modo per farlo all'interno del generatore di moduli .

risposta

77

Non utilizzare un formType e non è necessario associare un'entità per utilizzare il Generatore di form. Basta usare invece un array. Probabilmente trascurato questo piccola sezione nella documentazione di Symfony: 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

penso di aver fatto dimenticare che. Perfezionare! Grazie! –

+22

Per informazioni: '$ form-> bind ($ request)' è ora ** deprecato **, dovresti usare '$ form-> handleRequest ($ request)' ora. –

+2

Nota che per Symfony 3, i tipi di campo devono essere il nome della classe e non un alias. Quindi '-> add ('query', 'text')' diventa '-> add ('query', TextType :: class)' e devi ricordare di 'usare Symfony \ Component \ Form \ Extension \ Core \ Type \ TextType' – dnagirl

7

È inoltre possibile utilizzare createNamedBuilder metodo per la creazione forma

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