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

Это два основных способа, которые я использую для получения текущего пользователя в своих проектах. Надеюсь эти способы вам помогут.