Сбор ошибок форма должна отображаться


У меня есть кусок кода, который получите ошибки от Форма и дисплей для просмотра:

$errors = $form->getMessages();
$msg = '';
foreach ($errors as $error)
{
    foreach ($error as $err)
    {
        $msg .= $err . '<br/>';
    }
}
$this->view->error_message = $msg;

Это выглядит так некрасиво, но сейчас у меня нет никаких идей, чтобы улучшить его. Спасибо за помощь.



438
2
задан 14 декабря 2011 в 03:12 Источник Поделиться
Комментарии
3 ответа

Вы можете использовать array_merge, чтобы уменьшить набор из 2-Дим для 1-тусклым, затем лопаются массива.

$this->view->error_message = 
implode(array_reduce($form->getMessages(),
"array_merge",
array()),
"<br/>");

http://php.net/manual/en/function.array-merge.php

http://www.php.net/manual/en/function.array-reduce.php

5
ответ дан 14 декабря 2011 в 07:12 Источник Поделиться

Im предполагая, что ваш $ошибок массив выглядит так:

$errors = array(array('message 1'), array('message 2'), array('message 3'));

Затем вы могли бы использовать что-то вроде этого:

$msg = '';
foreach($errors as $inner) {
$msg .= current($inner) . '<br />';
}
echo $msg;
// message 1<br />message 2<br />message 3<br />

Я не знаю, если его более эффективным, чем 2, хотя по каждому элементу петли.

С другой стороны, я лично хотел бы посмотреть на изменение метода getmessages() метод так, что он возвращает один массив, а не многосторонней. С единственным массивом, нужно просто взрывает его с 'БР' :)

2
ответ дан 14 декабря 2011 в 03:12 Источник Поделиться

Учитывая ошибки такой:

$errors = array(array('message 1a','message 1b'), array('message 2'), array('message 3'));

Я вы могли бы сделать функцию, которая может называть себя отчитаться за вложенные массивы.

function showErrors($errors) {
foreach ($errors as $error) {
$msg .= (is_array($error))? showErrors($error) : $error.'<br/>';
}
return($msg);
}
$msg = showErrors($errors);

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

1
ответ дан 14 декабря 2011 в 04:12 Источник Поделиться