2014-01-22 11 views
14

Ich versuche, eine einfache Anmeldeseite für meine usermanagementbundle zu implementieren, und ich bin neu beim Erstellen eines Formulars durch Formbuilder. Es gibt nur 3 Funktionen in meinem Bundle, wo es eine neue Sitzung gibt, und es wird auf verschiedenen Routen aufgerufen, auch wenn ich die anderen 2 entferne, bekomme ich immer noch den gleichen Fehler. Hier ist mein Code:

<?php 

    namespace Acme\UserManagementBundle\Controller; 

    use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
    use Symfony\Component\HttpFoundation\Request; 
    use Symfony\Component\HttpFoundation\Session\Session; 
    use Acme\UserManagementBundle\Entity\Users; 
    use Acme\UserManagementBundle\Form\SigninType; 

    class DefaultController extends Controller 
    { 
     public function indexAction() 
     { 
      $session = new Session(); 
      $users = new Users(); 
      $form = $this->createForm(new SigninType(), $users); 

      if ($session->has('token')) 
      { 
       return $this->render('AcmeUserManagementBundle:Default:home.html.twig', array('token' => $session->get('token'))); 
      } 
      if (!($session->has('alert'))) 
      { 
       $session->set('alert', 'Welcome'); 
       return $this->render('AcmeUserManagementBundle:Default:index.html.twig', array('form' => $form->createView(), 'alert' => 'Welcome!')); 
      } 
      else 
      { 
       $alert = $session->get('alert'); 
       $session->clear(); 
       return $this->render('AcmeUserManagementBundle:Default:index.html.twig', array('form' => $form->createView() ,'alert' => $alert)); 
      } 
     } 

     public function logoutAction() 
     { 
      $session = new Session(); 
      $session->invalidate(); 
      return $this->render('AcmeUserManagementBundle:Default:index.html.twig'); 
     } 

     public function signupAction() 
     { 
      return $this->render('AcmeUserManagementBundle:Default:signup.html.twig'); 
     } 
     public function LoginAction(Request $request) 
     { 
      $session = new Session(); 
      if ($request->getmethod()=='POST' || $session->get('token') != ""){ 
       $user = $request->get('user'); 
       $password = $request->get('password'); 
       $em = $this->getDoctrine()->getManager(); 
       $repository = $em->getRepository('AcmeUserManagementBundle:Users'); 
       $username = $repository->findOneBy(array('username'=>$user,'password'=>$password)); 
        if (!$session->get('token') && $username) 
        { 
         $token = $this->get('token_generator')->getToken(); 
         $session->set('token', $token, 'user', $username); 
        } else { 
         $session->set('alert', 'Invalid Username and/or Password!'); 
         return $this->redirect($this->generateUrl('homepage')); 
        } 
        return $this->redirect($this->generateUrl('homepage')); 
      } else { 
       return $this->redirect($this->generateUrl('homepage')); 
      } 
     } 
    } 

Als ich versuchte, eine formbuilderinterface in meiner Funktion zu implementieren ich plötzlich diese eine gegenüber dem normalen Erstellen von angetroffen aus durch html, die ich habe keine Probleme bekommen überhaupt. Gibt es ein Problem mit meinem Code? weil ich diesen Login-Code über HTML ausprobiert habe und ihn in formbuilderinterface von Symfony konvertiert habe.

Antwort

41

Symfony2 startet standardmäßig Sitzungen automatisch.

Es besteht keine Notwendigkeit von $session = new Session(); ist diese

Versuchen,

public function indexAction(Request $request) 
{ 
    $session = $request->getSession(); 

Ref: http://symfony.com/doc/current/book/controller.html#managing-the-session

+0

Habe ich etwas in meiner Antwort verpasst? –

+0

ow Entschuldigung, ich habe versucht, den Kommentar zu posten, den ich als Antwort notiert habe. Aber es scheint, dass Sie bereits darauf hingewiesen haben. Ich habe es gelöscht und Ihre Antwort als richtig markiert. Prost! – Cedric

+0

Danke @ Cedric !!! –

0

Sie es falsch zu machen!

Ich habe einige Zeit mit der Suche nach einer Lösung für dieses Problem verschwendet, und am Ende die gleiche Sache (mit Request $ Anfrage) in der FunktionAction(), um eine Sitzungsvariable an eine Vorlage zu senden.

Allerdings ist das alles falsch. TWIG kann direkt auf alle Sitzungsvariablen zugreifen. Sie müssen keine Variablen in TWIG render() übergeben.

Um das ursprüngliche Problem zu lösen, sollten Sie das Standardverhalten von indexAction() ohne Parameter beibehalten und das "array ('token' => $ session-> get ('token'))" von Ihrem TWIG entfernen Ruf anzeigen.

Das einzige, was zu wissen ist, dass Sie die Session-Variable "Token" in Ihrer Vorlage direkt aufrufen können, mit: {{app.session.get ('token')}}

Und die Magie lassen ! So einfach !

Verwandte Themen