我正在尝试为我的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'));
}
}
}
当我尝试在我的函数中实现formbuilder接口时,我突然遇到了这个与正常创建的thru html,我根本没有遇到任何问题。我的代码有问题吗?因为我通过HTML尝试了这个登录代码并将其转换为Symfony的formbuilder接口组件。
答案 0 :(得分:46)
默认情况下,Symfony2会自动为您启动会话。
不需要$session = new Session();
试试这个,
public function indexAction(Request $request)
{
$session = $request->getSession();
参考:http://symfony.com/doc/current/book/controller.html#managing-the-session
答案 1 :(得分:0)
你做错了!
我一直在浪费时间寻找该问题的解决方案,并最终在functionAction()中执行相同的操作(使用Request $ request)将会话变量发送到模板。
然而这一切都是错误的。 TWIG能够直接访问所有会话变量,您不需要传递TWIG渲染中的任何变量()。
要回答原始问题,你应该保持indexAction()的默认行为没有参数,并删除&#34;数组(&#39;令牌&#39; =&gt; $ session-&gt; get(&#39;令牌&#39;))&#34;来自你的TWIG渲染电话。
唯一要知道的是你可以调用会话变量&#34; token&#34;直接在您的模板中,使用:{{app.session.get(&#39; token&#39;)}}
让魔法成真!那很简单!