РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
616 of 1361 menu

Метод loadUserByIdentifier

Метод loadUserByIdentifier принадлежит классу UserProvider и загружает объект пользователя по его уникальному идентификатору. Первым параметром передаётся строка $identifier - это может быть email, логин или другое уникальное поле. Если пользователь найден, метод возвращает объект UserInterface, иначе выбрасывает исключение UserNotFoundException.

Синтаксис

public function loadUserByIdentifier(string $identifier): UserInterface

Пример

Давайте создадим класс UserProvider, который загружает пользователя по email из базы данных:

<?php namespace App\Security; use App\Entity\User; use App\Repository\UserRepository; use Symfony\Component\Security\Core\Exception\UserNotFoundException; use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Core\User\UserProviderInterface; class UserProvider implements UserProviderInterface { public function __construct( private UserRepository $userRepository, ) { } public function loadUserByIdentifier(string $identifier): UserInterface { $user = $this->userRepository->findOneBy(['email' => $identifier]); if (!$user) { throw new UserNotFoundException('User not found'); } return $user; } public function refreshUser(UserInterface $user): UserInterface { return $this->loadUserByIdentifier($user->getUserIdentifier()); } public function supportsClass(string $class): bool { return $class === User::class; } } ?>

Пример

Давайте используем метод loadUserByIdentifier для загрузки пользователя по логину:

<?php namespace App\Controller; use App\Security\UserProvider; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class UserController extends AbstractController { #[Route('/user/{identifier}', name: 'user_show')] public function show(string $identifier, UserProvider $userProvider): Response { $user = $userProvider->loadUserByIdentifier($identifier); return new Response('User: ' . $user->getUserIdentifier()); } } ?>

Результат выполнения кода для адреса /user/abcde:

"User: abcde"

Пример

Давайте обработаем исключение UserNotFoundException, если пользователь не найден:

<?php namespace App\Controller; use App\Security\UserProvider; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Core\Exception\UserNotFoundException; class UserController extends AbstractController { #[Route('/user/{identifier}', name: 'user_show')] public function show(string $identifier, UserProvider $userProvider): Response { try { $user = $userProvider->loadUserByIdentifier($identifier); return new Response('User: ' . $user->getUserIdentifier()); } catch (UserNotFoundException $e) { return new Response('User not found', 404); } } } ?>

Результат выполнения кода для адреса /user/unknown:

"User not found"

Смотрите также

  • класс UserProvider,
    который загружает пользователей из хранилища
  • метод refreshUser,
    который обновляет объект пользователя
  • метод supportsClass,
    который проверяет поддержку класса пользователя
  • класс UserBadge,
    который хранит идентификатор пользователя
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить