Symfony входит в систему с идентификатором пользователя

Я разрабатываю приложение, используя Symfony2 и доктрину 2. Я хотел бы знать, как я могу получить текущий идентификатор пользователя, вошедшего в систему.


person Haritz    schedule 10.05.2012    source источник
comment
В контроллерах symfony2.1 вы можете получить пользователя, вызвав $this->getUser(). Я думаю, что это новое в этой версии symfony.   -  person pmoubed    schedule 01.02.2013


Ответы (4)


Текущие версии Symfony (Symfony 4, Symfony >=3.2)

Поскольку Symfony >=3.2< /strong> вы можете просто ожидать, что реализация UserInterface будет внедрена непосредственно в действие вашего контроллера. Затем вы можете вызвать getId() для получения идентификатора пользователя:

class DefaultController extends Controller
{
    // when the user is mandatory (e.g. behind a firewall)
    public function fooAction(UserInterface $user)
    {
        $userId = $user->getId(); 
    }

    // when the user is optional (e.g. can be anonymous)
    public function barAction(UserInterface $user = null) 
    {
        $userId = null !== $user ? $user->getId() : null;
    }
}

Вы по-прежнему можете использовать хранилище токенов безопасности, как и во всех версиях Symfony, начиная с 2.6. Например, в вашем контроллере:

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

Обратите внимание, что сокращение Controller::getUser(), упомянутое в следующей части этого ответа, больше не рекомендуется.

Устаревшие версии Symfony

Раньше самым простым способом доступа к пользователю было расширение базового контроллера и использование метода ярлыка getUser():

$user = $this->getUser();

Начиная с Symfony 2.6, вы можете получить пользователя из хранилища токенов безопасности:

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

До Symfony 2.6 вместо этого токен был доступен из службы контекста безопасности:

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

Обратите внимание, что служба контекста безопасности устарела в Symfony 2 и была удалена в Symfony 3.0.

person Jakub Zalas    schedule 10.05.2012
comment
Хороший ответ. Чтобы получить другие поля из объекта пользователя, такие как электронная почта, имя или пол. Используйте так. Чтобы получить пол, выполните команду echo 'Gender is : ' . $user-›getGender(); - person webblover; 20.09.2014
comment
Устарело с версии 2.6, будет удалено в 3.0. ! - person Zagloo; 20.01.2015
comment
getUser() по-прежнему используется в Symfony 4+ согласно документации: symfony.com/doc/current/ - person user1392897; 12.07.2019
comment
@Zagloo, я только что использовал пользовательский интерфейс внутри контроллера в своем Symfony 5, и он работал так, как и ожидалось. - person Ali; 06.04.2020

В symfony2 мы можем сделать это проще с помощью этого кода:

$id = $this->getUser()->getId();
person 53iScott    schedule 25.08.2013

Вы можете получить переменную с помощью кода ниже:

$userId = $this->get('security.context')->getToken()->getUser()->getId();
person webdeveloper    schedule 28.11.2012
comment
плохая практика, имя переменной должно быть $userId - person GusDeCooL; 16.08.2014

Это можно одеться методом:

/**
 * Get user id
 * @return integer $userId
 */
protected function getUserId()
{
    $user = $this->get('security.context')->getToken()->getUser();
    $userId = $user->getId();

    return $userId;
}

И индукция $this->getUserId()

public function example()
{
    print_r($this->getUserId()); 
}
person websky    schedule 15.12.2014