Я использую настройки безопасности Symfony. Все отлично работает, но я не знаю, как сделать одну важную вещь:
В ветке я могу получить информацию о текущем пользователе, выполнив:
Welcome, {{ app.user.username }}
или похожие
Как мне получить доступ к этой же информации в контроллере? В частности, я хочу получить текущий пользовательский объект, чтобы я мог сохранить его реляционно в другом объекте (сопоставление один-к-одному).
Я действительно надеялся, что это будет
$this->get('security.context')->getToken()->getUser()
но это не работает Это дает мне класс типа
Symfony\Component\Security\Core\User\User
и я хочу один из типа
Acme\AuctionBundle\Entity\User
которая моя сущность ....
entity-framework
security
symfony
Роберт Мартин
источник
источник
Ответы:
Symfony 4+, подход 2019+
В Symfony 4 (возможно, также 3.3, но только в 4), вы можете внедрить
Security
службу через автоматическое подключение к контроллеру следующим образом:Symfony 2 - Подход
Как говорит @ktolis, сначала нужно настроить свой
/app/config/security.yml
.Затем с
должно быть достаточно!
$user
ваш пользовательский объект! Вам не нужно запрашивать его снова.Узнайте, как настроить ваши поставщик в
security.yml
от SF2 документации и попробовать еще раз.Удачи!
источник
$user = $this->security->getUser();
,$user
всегдаnull
для меня, вне зависимости от того, залогинен я или нет.Лучшая практика
Согласно документации, начиная с Symfony 2.1, просто используйте этот ярлык:
Выше все еще работает на Symfony 3.2 и является ярлыком для этого:
Пример : И если вы хотите напрямую имя пользователя:
Если неправильный тип пользовательского класса
Пользователь будет объектом, и класс этого объекта будет зависеть от вашего провайдера .
источник
Нить немного старая, но я думаю, что это может сэкономить чье-то время ...
Я столкнулся с той же проблемой, что и исходный вопрос, что тип показан как Symfony \ Component \ Security \ Core \ User \ User
В конце концов оказалось, что я вошел в систему, используя пользователя в памяти
мой security.yml выглядит примерно так
тип пользователя in_memory всегда Symfony \ Component \ Security \ Core \ User \ User, если вы хотите использовать свою собственную сущность, войдите в систему, используя пользователя этого провайдера.
Спасибо hj
источник
В symfony> = 3.2 документация гласит:
Сообщение в блоге об этом
источник
источник
Ну, во-первых, вам нужно запросить имя пользователя пользователя из сеанса в вашем действии контроллера следующим образом:
затем сделайте запрос к БД и получите ваш объект с обычным dql, как
$ user теперь должен содержать пользователя с этим именем пользователя (вы также можете использовать другие поля)
... но вам сначала нужно будет настроить конфигурацию /app/config/security.yml, чтобы использовать соответствующее поле для вашего провайдера безопасности, например так:
надеюсь это поможет!
источник
$this->get('security.context')->getToken()->getUser()
сам получает вам залогиненный пользовательский объект. Вам не нужно запрашивать его снова. На самом деле, какую версию вы использовали?