Я проверяю, включен ли пользователь, чтобы он мог войти в систему, и если нет, покажу ему сообщение об ошибке на языке его языка. Это приложение Symfony 4.2. Итак, вот мой пользовательский чекер (который работает):
<?php
namespace App\Security;
use App\Entity\User as AppUser;
use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
use Symfony\Component\Security\Core\User\UserCheckerInterface;
use Symfony\Component\Security\Core\User\UserInterface;
class UserChecker implements UserCheckerInterface {
public function checkPreAuth(UserInterface $user)
{
if (!$user instanceof AppUser) {
return;
}
}
public function checkPostAuth(UserInterface $user)
{
/* Make the message translatable */
if (!$user->isEnabled()) {
throw new CustomUserMessageAuthenticationException(
'This account has not been activated.'
);
}
}
}
Обычный подход к переводу строк в Symfony 4 требует изменения подписи:
public function checkPostAuth(UserInterface $user, TranslatorInterface $translator)
Это будет работать в функциях, которые я определяю в контроллерах, но эта программа проверки пользователей зарегистрирована как служба, используемая в брандмауэре, поэтому мы получаем ошибку:
FatalErrorException
Compile Error: Declaration of App\Security\UserChecker::checkPostAuth(Symfony\Component\Security\Core\User\UserInterface $user, App\Security\TranslatorInterface $translator) must be compatible with Symfony\Component\Security\Core\User\UserCheckerInterface::checkPostAuth(Symfony\Component\Security\Core\User\UserInterface $user)
Я не могу найти документацию ни о каком другом способе работы с Symfony 4.