Многократное исключение в одном блоке try

Как поймать несколько сообщений за одну попытку?

try{
if (empty($news_genre)){
throw new Exception('<div class="error">Error 1</div>');
}elseif (strlen($news_title) < 30){
throw new Exception('<div class="error">Error 2</div>');
} elseif (strlen($news_image)< 30){
throw new Exception('<div class="error">Error 3</div>');
} elseif (strlen($news_description)< 500){
throw new Exception('<div class="error">Error 4</div>');
} elseif (count($news_tags) > 5){
throw new Exception('<div class="error">Error 5</div>');
}
} catch (Exception $e) {
die ($e->getMessage());
}

Я хочу повторить все ошибки в одной строке примерно так:

//die ($e->getMessage(), $e->getMessage(), $e->getMessage());
<div class="error">Error 1</div>
<div class="error">Error 2</div>
<div class="error">Error 3</div>
<div class="error">Error 4</div>
<div class="error">Error 5</div>

PS без разных уловов!

0

Решение

Вы не можете поймать несколько исключений, потому что не может быть множественные исключения. Как только выдается исключение, блок кода завершается с состоянием этого исключения.

Если вы хотите создать список ошибок валидации, вам не следует использовать исключения для этого. (Не используйте исключения для логического потока.) Вы должны просто проверить логику и построить свой список. В псевдокоде (поскольку мой PHP достаточно ржавый, чтобы его почти не существовало):

if (someCondition()) {
// add error to array
}
if (anotherCondition()) {
// add another error to array
}
// etc.

if (array has values) {
// display validation messages
// halt execution
}

(Обратите внимание, что я изменил ваш else if структура для нескольких ifс, так как по логике вы также можете только когда-либо иметь один сообщение с этим else if состав.)

2

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

Вы можете хранить сообщения в одной переменной и выдавать исключение, если выполняется одно из операторов if.

try{
$msg = false;
if (empty($news_genre))
$msg .= '<div class="error">Error 1</div>';
if (strlen($news_title) < 30)
$msg .= '<div class="error">Error 2</div>';
if (strlen($news_image)< 30)
$msg .= '<div class="error">Error 3</div>';
if (strlen($news_description)< 500)
$msg .= '<div class="error">Error 4</div>';
if (count($news_tags) > 5)
$msg .= '<div class="error">Error 5</div>';
if ($msg)
throw new Exception($msg);
} catch (Exception $e) {
die ($e->getMessage());
}
0

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