Метод getUserIdentifier
Метод getUserIdentifier принадлежит интерфейсу
UserInterface
и возвращает строку - уникальный идентификатор пользователя.
В качестве идентификатора обычно выступает email, логин
или любое другое уникальное поле сущности пользователя.
Symfony использует это значение при аутентификации, в том
числе для загрузки пользователя из провайдера и для
отображения имени текущего пользователя в шаблонах.
Метод не принимает параметров и должен возвращать строку.
Если в сущности пользователя есть отдельное поле email,
то его и возвращают из этого метода.
Синтаксис
public function getUserIdentifier(): string
Пример
Давайте создадим сущность пользователя, реализующую
UserInterface, и вернём из метода getUserIdentifier
значение поля email:
<?php
namespace AppEntity;
use SymfonyComponentSecurityCoreUserUserInterface;
class User implements UserInterface
{
private ?int $id = null;
private string $email = '';
private array $roles = [];
public function getId(): ?int
{
return $this->id;
}
public function getEmail(): string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $email;
return $this;
}
public function getUserIdentifier(): string
{
return $this->email;
}
public function getRoles(): array
{
$roles = $this->roles;
$roles[] = 'ROLE_USER';
return array_unique($roles);
}
public function eraseCredentials(): void
{
}
}
?>
Пример
Давайте создадим объект пользователя, зададим ему email
и получим идентификатор через метод getUserIdentifier:
<?php
namespace AppController;
use AppEntityUser;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class UserController extends AbstractController
{
#[Route('/user', name: 'user_show')]
public function show(): Response
{
$user = new User();
$user->setEmail('user@example.com');
$res = $user->getUserIdentifier();
return new Response($res);
}
}
?>
Результат выполнения кода:
user@example.com
Пример
Давайте используем метод getUserIdentifier
для получения имени текущего пользователя в контроллере:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentSecurityHttpSecurity;
class ProfileController extends AbstractController
{
#[Route('/profile', name: 'profile_show')]
public function show(Security $security): Response
{
$user = $security->getUser();
if ($user === null) {
return new Response('anonymous');
}
$res = $user->getUserIdentifier();
return new Response($res);
}
}
?>
Результат выполнения кода для авторизованного пользователя:
user@example.com
Результат выполнения кода для анонимного пользователя:
anonymous
Смотрите также
-
интерфейс
UserInterface,
который описывает контракт пользователя -
метод
getRoles,
который возвращает роли пользователя -
метод
eraseCredentials,
который очищает чувствительные данные пользователя -
класс
Security,
который даёт доступ к текущему пользователю