Метод supportsClass класса UserProvider
Метод supportsClass класса UserProvider проверяет, может ли провайдер пользователей работать с указанным классом сущности. Первым параметром передаётся имя класса, который необходимо проверить. Метод возвращает true, если провайдер поддерживает этот класс, и false в противном случае. Этот метод используется Symfony для выбора подходящего провайдера при загрузке пользователя по идентификатору.
Синтаксис
public function supportsClass(string $class): bool
Пример
Давайте создадим провайдер пользователей, который поддерживает только класс User:
<?php
namespace AppSecurity;
use AppEntityUser;
use SymfonyComponentSecurityCoreUserUserInterface;
use SymfonyComponentSecurityCoreUserUserProviderInterface;
use SymfonyComponentSecurityCoreExceptionUnsupportedUserException;
class UserProvider implements UserProviderInterface
{
public function loadUserByIdentifier(string $identifier): UserInterface
{
// load user logic
return new User();
}
public function refreshUser(UserInterface $user): UserInterface
{
// refresh user logic
return $user;
}
public function supportsClass(string $class): bool
{
return $class === User::class;
}
}
?>
Проверим работу метода для класса User:
<?php
$provider = new UserProvider();
$res = $provider->supportsClass(User::class);
var_dump($res);
?>
Результат выполнения кода:
true
Пример
Давайте проверим, что провайдер не поддерживает другой класс Admin:
<?php
namespace AppSecurity;
use AppEntityUser;
use AppEntityAdmin;
use SymfonyComponentSecurityCoreUserUserInterface;
use SymfonyComponentSecurityCoreUserUserProviderInterface;
class UserProvider implements UserProviderInterface
{
public function loadUserByIdentifier(string $identifier): UserInterface
{
// load user logic
return new User();
}
public function refreshUser(UserInterface $user): UserInterface
{
// refresh user logic
return $user;
}
public function supportsClass(string $class): bool
{
return $class === User::class;
}
}
?>
Проверим работу метода для класса Admin:
<?php
$provider = new UserProvider();
$res = $provider->supportsClass(Admin::class);
var_dump($res);
?>
Результат выполнения кода:
false
Пример
Давайте создадим провайдер, который поддерживает несколько классов пользователей:
<?php
namespace AppSecurity;
use AppEntityUser;
use AppEntityAdmin;
use SymfonyComponentSecurityCoreUserUserInterface;
use SymfonyComponentSecurityCoreUserUserProviderInterface;
class MultiUserProvider implements UserProviderInterface
{
public function loadUserByIdentifier(string $identifier): UserInterface
{
// load user logic
return new User();
}
public function refreshUser(UserInterface $user): UserInterface
{
// refresh user logic
return $user;
}
public function supportsClass(string $class): bool
{
return in_array($class, [User::class, Admin::class], true);
}
}
?>
Проверим работу метода для класса Admin:
<?php
$provider = new MultiUserProvider();
$res = $provider->supportsClass(Admin::class);
var_dump($res);
?>
Результат выполнения кода:
true
Смотрите также
-
класс
UserProvider,
который загружает пользователей из хранилища -
метод
loadUserByIdentifier,
который загружает пользователя по идентификатору -
метод
refreshUser,
который обновляет данные пользователя -
класс
UserBadge,
который хранит идентификатор пользователя