2011-01-28 4 views
1

Я не уверен, как это сделать: как только строка добавлена ​​с действием muy 'add', я хочу отправить пользователя в действие «view», чтобы они могли видеть строку, которая была отправлена. Но, увидев, что он только что был представлен, я хочу показать пользователю сообщение о том, что их данные были отправлены.Zend передает переменные между действиями?

Я показываю мои строки так: url.com/view/32

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

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

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

ответ

4

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

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

+0

+1 для flashMessenger, я почти забыл об этом, возможно, идеально подходит для этой ситуации, установил сообщение, а затем перенаправил пользователя на просмотр, а также проверить и отобразить сообщение. – Scoobler

1

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

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

Так в persudeo:

AddAction():

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

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

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

Если вы хотите переместить пользователя к другому URL see the answeer here

+0

, а просто делает вид не будет работать без данных, отправляемых в представление через мой viewAction(). И я хочу отправить пользователя на новый URL-адрес, но я бы предпочел не показывать свои данные в URL-адресе. – networkprofile

+0

. Вы бы не передали свои данные в URL-адресе, просто передайте success = true. В действии вашего представления будет рассмотрено получение новых данных, вы просто проверяете параметр успеха, и если в нем отображается сообщение в представлении. Вы правы, если вы визуализировали представление, вам нужно было бы строить данные из viewaction. – Scoobler

1

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

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

+0

Да, я делаю то же самое, чтобы ограничивать пользователей с «гостевых» страниц, но я думал, что есть другой способ сделать это. Угадайте, я сделаю это с сессиями .. спасибо! – networkprofile

1

попробовать что-то вроде этого ::

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

_forward здесь не так хорошо, так как обновление страницы будет выполнять отправку $ _POST и вставку данных снова. Лучше просто перенаправить. – Marcin

1

после изучения 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.pht мл:

<?php echo $this->msg ?> 

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

Смежные вопросы