поймать исключение, бросить еще одно … есть ли другой способ?

В платформе 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 просто для этого попробуйте блок!

Я спрашиваю потому что ловить исключение бросить еще один. кажется плохой практикой для меня.

Заранее спасибо.

0

Решение

Абсолютно неплохая практика и даже обычная практика. Но вы не должны просто отбрасывать предыдущее исключение, так как это может быть полезно для целей отладки.

<?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.
);
}

Это гарантирует, что у вас есть полная цепочка исключений в вашем распоряжении. Кроме того, ваш подход выглядит хорошо для меня.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]