Перенос div за пределы цикла foreach и эхо в другом месте

#php #html #foreach #echo

#php #HTML #foreach #эхо

Вопрос:

Я хочу напечатать div со списком ошибок внутри него. Ошибки обнаруживаются путем повторения внутри цикла foreach. Я хотел бы, чтобы весь этот div и список были внутри переменной, чтобы я мог распечатать его в требуемой части.

Вот что я делаю:

 errmessage = "";
//more code, if etc

else {
    $errmessage .= '<div class="form-error alert alert-danger"><strong>Form submission failed!</strong><ul>';
    foreach($vresult->getErrors() as $v) {
        $errmessage .= '<li>'.$v.'</li>';
   }
   $errmessage .= '</ul></div>';
   }
  

В другой части файла:

 <form method="post">
<?php
    echo $errmessage;
?>
  

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

Комментарии:

1. Вы могли бы просто установить флаг в своем первом бите, а затем получить возможные выходные данные во втором? Я не уверен, что полностью понимаю проблему.

2. @AbuNooh Вы разместили ветку else без if . Пожалуйста, разместите if тоже.

Ответ №1:

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

 <?php
class ErrorManager
{
    private $errors = Array();

    public function AddError($errorMessage)
    {
        array_push($this->errors,$errorMessage);
    }

    public function GetErrorMessage()
    {
        $finalMessage = "";

        foreach ($this->errors as amp;$error) {
            $finalMessage .= $error ."rn";
        }

        return $finalMessage;
    }
}
  

— Использование класса ——

 $errMngr = new ErrorManager();

$errMngr->AddError('A failure occured!');
$errMngr->AddError('another failure :(');

echo $errMngr->GetErrorMessage();

//OR Use this for HTML
echo nl2br($errMngr->GetErrorMessage());
?>
  

Таким образом, вы можете получить обычную текстовую строку, используя разделитель n r. Вы можете выводить ошибки в свой файл журнала, а также отображать их в виде HTML с nl2br()

Вы также можете изменить класс, чтобы использовать div список, подобный этому:

 public function GetErrorMessageHTMLList()
{
    $finalMessage = "<div><ul>";

    foreach ($this->errors as amp;$error) {
        $finalMessage .= '<li>'.$error .'</li>';
    }

    return $finalMessage.'</ul></div>';
}
  

Ответ №2:

Решение выглядит нормально, одно из предложений

В противном случае, если вы не хотите отображать сообщение «Ошибка отправки формы!» при отсутствии ошибок

 if(!empty($vresult->getErrors()) {
//Build error message inside
}