Довольно часто требуется получить текущего пользователя в 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 - зарегистрироваться / войти