我正在尝试在Symfony项目中实现登录表单。但是我不知道如何在控制器中正确使用会话。实际上,我不知道Symfony中的整个会话是什么。
我创建了登录表单,它可以正确检查用户是否存在,但是当我尝试将其保存到会话中时,我的IDE告诉我$ session是未定义的变量,我包括“使用Symfony \ Component \ HttpFoundation \ Session \ Session; ” 但这没有帮助。如果我写$ session = new Session(); $ session-> start();我的浏览器中的一个异常表明会话已经开始。也许我没有以正确的方式使用会话,或者不能在控制器中使用它。如何修复它以及如何使用会话以及Symfony中会话的启动时间和位置。这是我的代码。
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\User;
use Symfony\Component\HttpFoundation\Request;
use App\Form\UserType;
use App\Form\UserLoginType;
use Symfony\Component\HttpFoundation\Session\Session;
class UserController extends AbstractController
{
/**
* @Route("/EventsAndPeople/task_success", name="task_success")
*/
public function succsess()
{
return $this->render('home/Succes.html.twig');
}
/**
* @Route("/EventsAndPeople/Login", name="Login")
*/
public function login(Request $request)
{
$user = new User();
$form = $this->createForm(UserLoginType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted()) {
$notTrueUser = $form->getData();
$user = $this->getDoctrine()
->getRepository(User::class)
->findOneByPasswordAndEmailAndUsername($notTrueUser->getPassword(),$notTrueUser->getEmail(),$notTrueUser->getUsername());
if (!$user) {
throw $this->createNotFoundException(
'No product found for this email and password '
);
}
$session->set($user);
return $this->redirectToRoute('task_success');
}
return $this->render('home/LoginForm.html.twig', array(
'form' => $form->createView(),
));
}
}
我以为如果会话已经开始,我可以在控制器中使用它,但是我的IDE向我显示错误
答案 0 :(得分:1)
首先,您必须创建通话会话的对象
像这样
$session = new Session();
或(对于您的问题,我想您需要此声明)
$session = $request->getSession();
,然后使用以下值定义键:->
$session->set('user', $user);