2014-01-03 3 views
8

Я пытаюсь создать диспетчер задач, и мне нужно иметь возможность получить идентификатор пользователя пользователя, который в настоящее время зарегистрирован, чтобы при создании задачи идентификатор пользователя также вводится в базу данных. Я не могу заставить его работать, он продолжает говорить мне, что call to undefined function getUser() я не думал, что должен был определить его, я думал, что он встроен.Получение идентификатора пользователя от входа в систему пользователя в FOSUserBundle

Может кто-нибудь помочь мне исправить это, было бы очень признательно!

здесь есть функция, которая создает задачу

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

ответ

16

Вам не нужно создавать новый объект пользователя $user = new User();, вы можете вошедшую в объекте пользователя из контекста безопасности

$user = $this->container->get('security.context')->getToken()->getUser(); 
$user->getId(); 
+1

спасибо, что это сработало! – zachstarnes

+1

это не сработало для меня. Я получил ошибку: вы запросили несуществующий сервис «security.context». –

18

просто Письмо

$user = $this->getUser()->getId(); 

Вы получаете идентификатор текущего пользователя

+0

это не сработало для меня. –

4

Это работает для меня с 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(); 
} 
0

вы можете просто использовать эту переменную: {{app.user.id}}.

Отображает подключенный идентификатор пользователя или ничего, если никто не подключен

Смежные вопросы