从FOSUserBundle中的登录用户获取用户标识

Zac*_*nes 9 php symfony fosuserbundle

我正在尝试创建一个任务管理器,我需要能够获取当前登录用户的用户ID,以便在创建任务时,用户ID也会输入到数据库中.我不能让它工作它一直告诉我,call to undefined function getUser()我不认为我必须定义它,我认为它是内置的.

有人可以帮我解决这个问题,我将不胜感激!

这是创建任务的函数

<?php

namespace Starnes\TaskBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Starnes\TaskBundle\Entity\Task;
use Starnes\TaskBundle\Form\TaskType;
use Starnes\UserBundle\Entity\User;

/**
 * Task controller.
 *
 * @Route("/task")
 */
class TaskController extends Controller
{

    /**
     * Lists all Task entities.
     *
     * @Route("/", name="task")
     * @Method("GET")
     * @Template()
     */
    public function indexAction()
    {
        $em = $this->getDoctrine()->getManager();

        $entities = $em->getRepository('StarnesTaskBundle:Task')->findAll();

        return array(
            'entities' => $entities,
        );
    }
    /**
     * Creates a new Task entity.
     *
     * @Route("/", name="task_create")
     * @Method("POST")
     * @Template("StarnesTaskBundle:Task:new.html.twig")
     * 
     */
    public function createAction(Request $request)
    {
        $user = new User();
        $userID = $user->getUser()->getId();
        $entity = new Task();
        $form = $this->createCreateForm($entity);
        $form->handleRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($entity);
            $entity->setUserId($userID);
            $em->flush();

            return $this->redirect($this->generateUrl('task_show', array('id' => $entity->getId())));
        }

        return array(
            'entity' => $entity,
            'form'   => $form->createView(),
        );
    }
Run Code Online (Sandbox Code Playgroud)

ios*_*ses 20

只是写作

$user = $this->getUser()->getId();
Run Code Online (Sandbox Code Playgroud)

您获得当前用户的ID


M K*_*aid 19

您不需要创建新的用户对象$user = new User();,您可以从安全上下文中获取当前登录的用户对象

$user = $this->container->get('security.token_storage')->getToken()->getUser();
$user->getId();
Run Code Online (Sandbox Code Playgroud)

  • 它对我不起作用.我收到错误:您已请求不存在的服务"security.context". (2认同)

use*_*349 5

这对我使用Symfony 3

if( $this->container->get( 'security.authorization_checker' )->isGranted( 'IS_AUTHENTICATED_FULLY' ) )
{
    $user = $this->container->get('security.token_storage')->getToken()->getUser();
    $username = $user->getUsername();
}
Run Code Online (Sandbox Code Playgroud)