web-dev-qa-db-ja.com

FOSUserBundleにログインしているユーザーからユーザーIDを取得する

タスクマネージャーを作成しようとしていますが、現在ログインしているユーザーのユーザー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(),
        );
    }
9
Zach Starnes

新しいユーザーオブジェクトを作成する必要はありません$user = new User();、セキュリティコンテキストから現在ログインしているユーザーオブジェクトを作成できます

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

編集:security.contextは非推奨です。代わりにsecurity.token_storageを使用してください。詳細については: https://symfony.com/blog/new-in-symfony-2-6-security-component-improvements

18
M Khalid Junaid

単に書く

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

現在のユーザーのIDを取得します

20
ioses

これは私のために働いていますSymfony

if( $this->container->get( 'security.authorization_checker' )->isGranted( 'IS_AUTHENTICATED_FULLY' ) )
{
    $user = $this->container->get('security.token_storage')->getToken()->getUser();
    $username = $user->getUsername();
}
4
user2182349

次の変数を使用できます:{{app.user.id}}。

接続されているユーザーIDが表示されるか、誰も接続されていない場合は何も表示されません

0
M. Dao