Довольно часто требуется получить текущего пользователя в Symfony проекте и произвести с ним какие-то действия. Давайте сейчас рассмотрим, как мы можем это сделать в различных местах проекта.
Подробнее о том как работать с системой аутентификации и авторизации в Symfony, вы можете посмотреть в моем курсе:
https://webkyrs.info/category/symfony-5-autentifikatsiia-polzovatelei-cherez-login-formu
Получение текущего пользователя в контроллере
Пожалуй, это самый простой случай. В этом случае мы можем воспользоваться конструкцией $this->getUser().
Вот небольшой пример, как это может выглядеть
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; class MyController extends AbstractController { public function myAction() { $user = $this->getUser(); if ($user) { // пользователь авторизован } else { // пользователь не авторизован } } }
Метод $this->getUser() возвращает объект пользователя, если пользователь авторизован, и null, если пользователь не авторизован.
Получение внутри сервиса
Если нам вдруг понадобился текущий пользователь внутри сервиса мы можем воспользоваться TokenStorageInterface.
В конструкторе сервиса мы передаем зависимость Security. Затем в методах сервиса мы используем метод getUser() для получения текущего пользователя.
Если пользователь не авторизован, метод getUser() вернет значение null.
use Symfony\Component\Security\Core\Security; class YourService { private $security; public function __construct(Security $security) { $this->security = $security; } // ... }
$user = $this->security->getUser(); if ($user) { $username = $user->getUsername(); // ... }
Это два основных способа, которые я использую для получения текущего пользователя в своих проектах. Надеюсь эти способы вам помогут.
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:
Email - зарегистрироваться / войти