2014-01-22 23 views
14

我想实现简单的登录页面为我usermanagementbundle和我在创建直通formbuilder形式新。我的包里只有3个函数,有一个新的会话,它在不同的路由中被调用,即使我删除了其他的2,我仍然收到同样的错误。这里是我的代码:

<?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')); 
      } 
     } 
    } 

当我想实现我的函数内部formbuilderinterface我突然遇到这样的一个对比,从直通HTML我已经都得到没有问题的正常创建。我的代码有问题吗?因为我通过HTML尝试了这个登录代码并将其转换为Symfony的formbuilderinterface组件。

回答

41

Symfony2中,默认情况下,自动启动会话你。

没有必要的$session = new Session();

试试这个,

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

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

+0

难道我错过了我的答案任何东西吗? –

+0

嗷嗷对不起,我想发布一个我有一个答案评论..但似乎你已经指出来了。我已将其删除并将您的答案标记为正确。干杯! – Cedric

+0

谢谢@Cedric !!! –

0

你就错了!

我已经浪费了一些时间寻找该问题的解决方案,并最终在functionAction做同样的事情(使用请求$请求)()到一个会话变量发送给模板。

然而这一切是错误的。 TWIG能够直接访问所有会话变量,您不需要在TWIG render()中传递任何变量。

要回答原始问题,您应该保持indexAction()的默认行为不带参数,并从TWIG中移除“array('token'=> $ session-> get('token'))”呈现呼叫。

知道的唯一的事情是,你可以直接调用会话变量“令牌”在你的模板,使用:{{app.session.get(“令牌”)}}

而让魔术是!那简单!

相关问题