Как поймать несколько сообщений за одну попытку?
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 без разных уловов!
Вы не можете поймать несколько исключений, потому что не может быть множественные исключения. Как только выдается исключение, блок кода завершается с состоянием этого исключения.
Если вы хотите создать список ошибок валидации, вам не следует использовать исключения для этого. (Не используйте исключения для логического потока.) Вы должны просто проверить логику и построить свой список. В псевдокоде (поскольку мой 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
состав.)
Вы можете хранить сообщения в одной переменной и выдавать исключение, если выполняется одно из операторов 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());
}