Zend - скрыть форму и показать сообщение - PullRequest
2 голосов
/ 06 октября 2011

У меня есть Zend-форма с несколькими полями.

Когда форма проверена, я хотел бы скрыть форму и показать сообщение об успехе.

Существует так много способов сделать это - перенаправить на другое действие контроллера, отобразить другой скрипт представления, пометить в помощнике / сеансе представления и т. Д.

Есть ли лучшая практика для этого?

Спасибо.

Ответы [ 3 ]

1 голос
/ 06 октября 2011

Я думаю, что это:

//into controller
$form = new Form_Foo();
if ($this->getRequest()->isPost() && $form->isValid($_POST)) {
    $this->view->message = "Post Successful!!!";
} else {
    $this->view->form = $form;
}

и

//into view
<?= $this->message ?>
<?= $this->form ?>
1 голос
/ 06 октября 2011

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

Я думаю, что подход нормальный, но не оптимальный. Он тесно связывает сообщения с рабочим процессом и создает необходимость повторения кода. Это не обязательно. Обмен сообщениями IMO должен быть исключен из рабочего процесса и обрабатываться с помощью компонента многократного использования. Оказывается, Zend Framework предоставляет нам необходимый инструмент, flashMessenger.

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

Примеры и ресурсы, касающиеся flashMessenger:

FlashMessenger лучше всего работает с дополнительным помощником вида, который можно найти по этим ссылкам!

1 голос
/ 06 октября 2011

Это мой путь:

В контроллере, когда форма была отправлена ​​как успешная, я установил

$this->view->success_msg = "Success.";

и в файле просмотра я просто спрашиваю:

<?php
$success_msg = $this->success_msg;
if(isset($success_msg)){
    echo $success_msg;
}else{
    echo $form;
}
?>
...