2013-11-23 10 views
8

Ich bin ein Anfänger in Symfony2. Die handleRequest() Funktion funktioniert nicht für "GET" Methode, während derselbe Code für "POST" funktioniert.

public function addAction(Request $request){ 
    $std = new Student(); 

    $form = $this->createForm(new StudentForm, $std, 
     array('method'=>'GET')); 

    $form->handleRequest($request); 

    if($form->isSubmitted()){ 
     $std= $form->getData(); 
     $em= $this->getDoctrine()->getManager(); 
     $em->persist($std); 
     $em->flush(); 
     return $this->render('target.twig'); 
    } 

    return $this->render('target twig', 
     array('newStdForm'=> $form->createView(),)); 
} 

Der obige Code funktioniert nicht, aber wenn ich 'method':'GET' zu 'method':'POST' ändern, dann funktioniert es gut.

+0

Hallo, bitte versuchen Sie genauer zu sein. – gilden

+0

Und warum möchten Sie GET erzwingen? Gibt es einen bestimmten Grund, dies mit einer GET-Anfrage und nicht mit einem POST zu tun? – ghostika

Antwort

1

Ich denke, es ist, weil in POST-Anfragen Parameter im Körper der HTTP-Anfrage übergeben werden. Und diese handleRequest sucht nach diesen Werten im Hauptteil der Anfrage. In einer GET-Anfrage werden Parameter jedoch direkt in der URL übergeben. Deshalb denke ich, dass die Handhabung nicht funktioniert.

Normalerweise verwenden wir GET, um eine Seite oder URL und einen POST abzurufen, um Informationen an den Server zu senden.

0

Sind Sie sicher, dass Ihre Zweigvorlage korrekt ist?

17

Geben Sie die Methode des Formulars in der buildForm-Methode der StudentForm-Klasse an. Daher kann handleRequest die GET-Parameter abrufen.

class StudentForm 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     // ... 
     $builder->setMethod('GET'); 
    } 
} 
0

Ich konfrontiert dieses Problem heute. Pierre Rolands Antwort ist teilweise korrekt für die aktuelle Version. Ich habe den Standard "HttpFoundationRequestHandler" überprüft, der in "handleRequest" aufgerufen wird.

Eine explizite GET Form „vorgelegt“ betrachtet werden, wenn:

  • die Form keinen Namen hat (wenn Sie eine Formularklasse zum Beispiel verwenden).
  • Die Anforderungsabfrage enthält einen Parameter mit dem Namen des Formulars.
Verwandte Themen