PHP: валидация формы

Здравствуйте, товарищи!

У меня проблема с валидацией и выводом сообщений в вид. Почему-то не работает простая проверка и сообщения не выводятся, при этом отправка минует валидацию и пишется всё это дело в базу. Вот код контроллера:

public function addAction()  {
    if (!empty($_POST)) {
        $textLen = iconv_strlen($_POST['text']);
        if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $message = 'Некорректный e-mail';
        } else {
            if ($textLen < 10 or $textLen > 500) {
                $message = 'Текст сообщения может содержать от 10 до 500 знаков';
            }
        }
        $id = $this->model->feedbackAdd($_POST);
        if (!$id) {
            $message = 'Ошибка запроса';
        }
        $message = 'Сообщение отправлено!';
    }
    $this->view->render('Обратная связь', 0, 0, 0, $message);

    var_dump($_POST['text']);
    var_dump($message);
}

Ну и вид, здесь всё проще простого:

<h1><?= $title ?></h1>

<p><?= $message ?></p>

<form action="/feedback/add" method="post">
    <input type="text" name="email" placeholder="E-mail" />
    <textarea name="text" placeholder="Message"></textarea>
    <input type="submit" value="Send" id="sendMessageButton" />
</form>

Вот я не могу понять, почему не выходит, поможите, пожалуйста!


Ответы (1 шт):

Автор решения: Давид Манжула

Лично я бы вынес добавление проверку в другой метод, а ошибку кидал через throw. Вот как-то так, как минимум.

public function addAction()  {
    if (!empty($_POST)) {
        try{
            $id = $this->sendFeedback($_POST);
            $message = 'Сообщение отправлено!';
        } catch (Exception $e) {
            $message = $e->getMessage();
        }
    }
    $this->view->render('Обратная связь', 0, 0, 0, $message);
}

private function sendFeedback($details){
    if (!filter_var($details['email'], FILTER_VALIDATE_EMAIL)) {
        throw new Exception('Некорректный e-mail');
    }
    
    $textLen = iconv_strlen($details['text']);
    if ($textLen < 10 or $textLen > 500) {
        throw new Exception('Текст сообщения может содержать от 10 до 500 знаков');
    }

    $id = $this->model->feedbackAdd($details);
    if (!$id) {
        throw new Exception('Ошибка запроса');
    }
    return $id;
}
→ Ссылка