タスクマネージャーを作成しようとしていますが、現在ログインしているユーザーのユーザー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(),
);
}
新しいユーザーオブジェクトを作成する必要はありません$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
単に書く
$user = $this->getUser()->getId();
現在のユーザーのIDを取得します
これは私のために働いていますSymfony
if( $this->container->get( 'security.authorization_checker' )->isGranted( 'IS_AUTHENTICATED_FULLY' ) )
{
$user = $this->container->get('security.token_storage')->getToken()->getUser();
$username = $user->getUsername();
}
次の変数を使用できます:{{app.user.id}}。
接続されているユーザーIDが表示されるか、誰も接続されていない場合は何も表示されません