Zend передача переменных между действиями? - PullRequest
1 голос
/ 28 января 2011

Я не уверен, как это сделать: как только строка добавлена ​​с помощью действия «Добавить», я хочу отправить пользователю мое действие «просмотреть», чтобы они могли видеть отправленную строку.Но, поскольку он был только что отправлен, я хочу показать пользователю успешное сообщение о том, что его данные были отправлены.

Я показываю свои строки следующим образом: url.com/view/32

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

Так что я хочу передать что-то вроде $submitted = true на мой взгляд Action, но я понятия не имею, как это сделать.Любые предложения?

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

Ответы [ 5 ]

3 голосов
/ 29 января 2011

Помощник действий flashMessenger предназначен для отображения сообщений в следующем запросе.

Использует сеанс для хранения информации.

1 голос
/ 14 мая 2011

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

в вашем form.html:

<input type="text" name="field[input1]" id="input1" />
<input type="text" name="field[input2]" id="input2" />

в вашем controller.php:

public function addAction(){
        if ($this->getRequest()->isPost()){         
            $fields= $this->_getParam("field");         
            $this->view->msg = ($this->myDB->add($fields) ? "Add succeeded" : "Add failed");
            header("location: http://mysite.com/thepageiwantutogoto");
        }
    }

в вашем view.phtml:

<?php echo $this->msg ?>

Кстати $this->myDB->add($fields), где у вас есть инструкция вставки в БД

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

попробуйте что-то вроде этого:

    if ($this->getRequest()->isPost()) {
        if ($form->isValid($_POST)) {
            $data = $form->getValues();
            $M = new Model_Xyz();
            $M->insert($data);
            //now the magic, pass success param to to the viewAction()
            return $this->_forward('view', null, null, array ('success' => 1));
        }
    }

Теперь параметр успеха передается в viewAction () так же, как это было в URL, поэтому вы можете получить к нему доступ в контроллере и представлении.Удачи!

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

Вы можете отправить данные через переменную сеанса (вы можете использовать Zend_Session для обработки этого).Когда вы достигаете своего представления, вы проверяете, установлена ​​ли переменная сеанса, если это так, вы отображаете сообщение и аннулируете переменную.Таким образом, если пользователь обновит страницу, сообщение больше не будет отображаться (что не относится к параметрам URL, сообщение будет отображаться снова).Если он не установлен, вы просто не отображаете сообщение.

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

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

Вы можете просто отобразить представление, когда addAction() завершится успешно:

return $this->render('view');

Итак, в persudeo:

addAction ():

  • Еслизапрос не POST показать пустую форму добавления.
  • Если страница является POST, но форма недействительна, перезапустите форму.
  • Если страница является POST, формабыл действителен, визуализируйте представление.

Вам нужно было бы передать все скрипту представления, который вы делаете для viewAction(), но вы также можете передать сообщение, которое теперь попадет в скрипт представления.,

В вашем view.phtml просто используйте сниппет php для проверки if (isset($this->message))echo "Data Added...."; Таким образом, при использовании обычного viewAction () сообщение не будет отображаться.Это оставит пользователя на addAction() url.

Если вы хотите переместить пользователя на другой URL , см. Ответ здесь

...