如何在Symfony中的控制器内的会话中保存用户

时间:2018-12-29 21:04:20

标签: php symfony session

我正在尝试在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向我显示错误

1 个答案:

答案 0 :(得分:1)

首先,您必须创建通话会话的对象

像这样

 $session = new Session();

或(对于您的问题,我想您需要此声明)

 $session = $request->getSession();

,然后使用以下值定义键:->

   $session->set('user', $user);