class ApiKeyUserProvider implements UserProviderInterface
{
public function getUsernameForApiKey(string $authToken): string
{
// ...
throw new CustomUserMessageAuthenticationException('Access denied');
// ...
}
}
class ApiKeyAuthenticator implements SimplePreAuthenticatorInterface
{
public function authenticateToken(TokenInterface $token, UserProviderInterface $userProvider, $providerKey)
{
// ...
try {
$username = $userProvider->getUsernameForApiKey($authToken);
} catch (CustomUserMessageAuthenticationException $exception) {
throw new AccessDeniedHttpException($exception->getMessage(), $exception);
}
// ...
}
}
class ExceptionListener
{
public function onKernelException(GetResponseForExceptionEvent $event): void
{
dump($event->getException());
}
}
App\EventListener\ExceptionListener:
tags:
- { name: kernel.event_listener, event: kernel.exception }
Использует интерфейс, похожий на коллекции...
Может сейчас тебе кажется, что потом они понадобятся.
Поверь, в 8 из 10 случаев не понадобятся (цифра с потолка).
Вместо того чтобы выявлять требования, ты тратишь время на их выдумывание, и хорошо если угадаешь.
Согласен (но не основной). Именно поэтому я предлагаю создавать Exception-ы под реальные требования проекта, а не под себя любимого.
Стек трейс никто не отменял. Мы ведь про php говорим, да?
Ты же сообщение об ошибке то туда положишь? throw new FileException("Нет доступа к файлу");
У тебя же есть текстовый редактор который найдет все "new FileException", да?
Че тут аццкого?
Зачем вам AccessFileException?
Если вы после этой ошибки программно выставляете нужные права - то ок.
Если вы просто выводите сообщение - то зачем?