В платформе Laravel каждый раз, когда вы пытаетесь получить некоторые данные из вашей красноречивой модели, если возникает исключение, он выдаетModelNotFoundException
, В моем проекте мне нужно поймать это исключение и перенаправить пользователя на определенный маршрут.
решение, которое я закончил, выглядит так:
try{
$foundUser = $this->user->whereId($id)->firstOrFail();
}catch(ModelNotFoundException $e){
throw new NonExistantUserException;
}
Я знаю, что могу поместить свой код перенаправления в блок catch, однако я уже перехватываю подобные исключения в global.php:
App::error(function(NonExistantUserException $e)
{
return Redirect::back()->WithInput();
});
Я хочу знать, есть ли способ сказать, например, независимо от того, какое исключение произойдет внутри блока try Я хочу поймать это как NonExistantUserException
просто для этого попробуйте блок!
Я спрашиваю потому что ловить исключение бросить еще один. кажется плохой практикой для меня.
Заранее спасибо.
Абсолютно неплохая практика и даже обычная практика. Но вы не должны просто отбрасывать предыдущее исключение, так как это может быть полезно для целей отладки.
<?php
try {
$foundUser = $this->user->whereId($id)->firstOrFail();
} catch (ModelNotFoundException $e) {
throw new NonExistentUserException(
"Could not find user for '{$id}'.",
null,
$e // Keep previous exception.
);
}
Это гарантирует, что у вас есть полная цепочка исключений в вашем распоряжении. Кроме того, ваш подход выглядит хорошо для меня.
Других решений пока нет …