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

40

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

  • 0
    В контроллерах symfony2.1 вы можете получить пользователя, вызвав $ this-> getUser (). Я думаю, что это новое в этой версии Symfony.
Теги:
dql
doctrine2

4 ответа

109
Лучший ответ

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

Поскольку Symfony >= 3.2, вы можете просто ожидать, что реализация 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 3 и был удален в Symfony 4.0

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

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

$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.

  • 2
    Хороший ответ. Чтобы получить другие поля от объекта пользователя, такие как электронная почта, имя или пол. Используйте как это. Чтобы получить пол, повтори «Гендер:». $ user-> getGender ();
  • 0
    Устаревший с версии 2.6, будет удален в 3.0. !
13

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

$id = $this->getUser()->getId();
2

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

$userId = $this->get('security.context')->getToken()->getUser()->getId();
  • 1
    плохая практика, имя переменной должно быть $userId
0

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

/**
 * 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()); 
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню