2013-10-16 9 views
5

Sto inviando un modulo a un controller diverso da quello che emette il modulo.Symfony2 Invio di un modulo a un altro controller e controllo isValid()

La mia domanda è: come si controlla che i dati inviati siano validi?

Ho provato diverse cose. la cosa principale che voglio convalidare è "_token"

Come si fa?

Questo è un esempio del mio codice.

/* 
Out put the search form 
*/ 
public function searchAction(Request $request) 
{ 
$form = $this->createFormBuilder() 
    ->setAction($this->generateUrl('email_search')) # <- route to the search process controler 
->setMethod('GET') 
->add('userSearch', 'text',array(
     'required' => true, 
     'label' => false, 
     'attr' => array(
      'placeholder' => 'Search User Email', 
        ) 
       ) 
     ) 
      ->add('Serch', 'submit') 
      ->getForm(); 

    return $this->render(
        'TwigBundle:Search:Search.html.twig', 
        array(
         'form' => $form->createView() 
        ) 
       ); 

} 

/* 
Process the search 
*/ 
public function emailResultsAction(Request $request){ 

    $form = $this->createFormBuilder()->getForm(); 
    $form->handleRequest($request); 
    if ($form->isValid()) { 
     $ret = $_POST; 
    }else{ 
     $ret = 'failed'; 
    } 
    /* 
    ... Process the search 
    */ 
    return new Response(print_r($ret)); 

} 

Questo dà l'errore:

"Call to undefined function Acmy\UserBundle\Controller\getForm() in xxxxxxx" 

posso convalidare il me stesso di ricerca, ma non so come convalidare il _token.

Questo non sembra essere coperto nella documentazione di Symfony2.

Grazie in anticipo.

risposta

4

È possibile creare un metodo nel controller che crea il modulo e quindi utilizzarlo per ottenere la classe Form da entrambe le azioni.

Pseudo:

private function buildSearchForm() { 
    return $this->createFormBuilder() 
     ->setAction(...) 
     // ... 
} 

public function searchAction(Request $request) { 
    $form = $this->buildSearchForm(); 
    // Do the necessary things 
} 

public function emailResultsAction(Request $request) { 
    $form = $this->buildSearchForm(); 
    // Do your validation here 
} 
+0

che ha funzionato perfettamente, grazie per il tuo aiuto @ TheOnly92! – Joe

+0

Prego :) Assicurati di accettarlo come risposta alla tua domanda. – TheOnly92

+0

Quando provo isValid, mi restituisce false, ma $ form-> isValid()) è vuoto. Hai avuto questo problema? – ezawadzki

5

separata creazione il modulo in essa la propria classe di form http://symfony.com/doc/current/book/forms.html#creating-form-classes.

In questo modo, si può semplicemente creare il modulo nella secondo metodo/controller e quindi associare la richiesta al form utilizzando handleRequest, quindi verificare se il modulo è valido facendo

if ($form->isValid()){... 
+2

Questo è, in effetti, in questo modo dovrebbe essere fatto ... –

Problemi correlati