Правильный способ отображения ошибок, когда запись не может быть найдена в базе данных - PullRequest
2 голосов
/ 19 января 2011

В настоящее время у меня есть модель с методом getEmails ($ id = NULL). Если $ id == NULL, getEmails () использует fetchAll ($ select) -> toArray (), чтобы вернуть все записи в таблице электронной почты. В представлении у меня есть оператор if, который проверяет, является ли возвращаемый массив пустым массивом. Если это так, он отображает ошибку, сообщающую пользователю, что нет сообщений для отображения, в противном случае он проходит цикл foreach () для отображения всех сообщений.

В этом случае правильно ли использовать оператор if для проверки, является ли массив электронной почты emapty? Или я должен делать это по-другому?

Если $ id! = NULL, getEmails использует следующий код для возврата только одной записи:

        $select->where('id=?',$id);
        $row = $this->fetchRow($select)
        if(!$row) throw new Exception('Could not find email with ID '.$id);
        else return $row->toArray();

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

Мне кажется, что существует более унифицированный способ отображения ошибок пользователю при необходимости.

Правильно ли создавать исключение в случае, если письмо с идентификатором $ id не может быть найдено?

Я пытаюсь научиться «правильному» способу ведения дел, поэтому спасибо за вашу помощь :-)

1 Ответ

0 голосов
/ 19 января 2011

Вы можете использовать Zend Framework Flash Messenger для отображения этого сообщения об ошибке пользователю.

В контроллере вы можете использовать следующий код:

$this->_helper->flashMessenger->addMessage("Could not find email with ID $id");

Чтобы отобразить сообщение, которое выможет сделать следующее:

В контроллере вы должны получить сообщения:

$this->view->messages = $this->_helper->flashMessenger->getMessages();

В скрипте вида вы хотите отобразить их:

<?php if (count($this->messages)) : ?>
<ul id="messages">
<?php foreach ($this->messages as $message) : ?>
    <li><?php echo $this->escape($message); ?></li>
<?php endforeach; ?>
</div>
<?php endif; ?>

Этоэто ОЧЕНЬ простой пример использования флэш-мессенджера, но это, безусловно, поможет вам в этом.

РЕДАКТИРОВАТЬ: После перечитывания вашего вопроса я понял (как я должен был сразу), вы генерировалиошибка / исключение из модели.Вы можете проверить нулевое возвращаемое значение в контроллере и отправить оттуда сообщение, или вы можете создать сеанс и хранить там сообщения, которые будут забраны и помещены во флэш-мессенджер контроллером.

...