2015-02-03 2 views
-1

у меня есть этот код:Propagate исключения следующего улов

<?php 
[...] 

// Authentication error 
catch(AuthException $e) 
{ 
    // TODO: Save fault to auth into DB 

    // Propagate exception 
    throw $e; 
} 

// Common exception 
catch(Exception $e) 
{ 
    // TODO: Log error here 

    $response = JsonResponse(array("error" => $e->getMessage())); 
    $response->send(); 
} 

Я хочу, чтобы иметь возможность бросить AuthException и Exception, и хотят быть уверены, что улов AuthException будет хранить ошибку в БД, а также общее исключение будет возвращается как ошибка. Но теперь у меня есть ошибка, что у меня есть исключение. Или, может быть, мне нужно записать ошибку в конструкторе AuthException?

+0

вы выбрасываете исключение после того, как поймали, так что если у вас нет другого слоя кода, который будет поймать его и не SMTH с ним, вы будете иметь 'неперехваченной ошибки exception' –

+0

Почему не вы просто добавляете столбец в '$ response' в блок' catch (AuthException $ e) '? –

ответ

1

Вам не нужно ловить каждое исключение, я думаю, вы хотите сделать что-то подобное?

try { 
     //... 
} catch(Exception $e){ 

    if($e instanceof AuthException) { 
    // Log error here 
    } 

    $response = JsonResponse(array("error" => $e->getMessage())); 
    $response->send(); 
} 
+0

Да, это так. Но этот путь не кажется естественным. Потому что я могу избежать AuthException и просто переключить/case или smth, аналогично разрешению типа ошибки в одном блоке catch – Neka

Смежные вопросы