Как отправить форму в Zend? - PullRequest
2 голосов
/ 11 июня 2011

У меня есть следующее действие для отображения формы.

public function showformAction() {  
   $this->view->form = new Form_MyForm();
   $this->view->form->setAction( 'submitform' );
}

. Приведенное выше действие успешно показывает форму только с одной текстовой областью и кнопкой отправки.

И я использую следующее действие для отправки вышеуказанной формы:

public function submitformAction() {

    $form = new Form_MyForm();
    $request = $this->getRequest();

      if ( $request->isPost() ) {
           $values = $form->getValues();
           print_r($values);die();      
      } else {
           echo 'Invalid Form'; 
      }
}

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

Array ( [myfield] => ) 

Это означает, что значения не отправляются правильнои всегда показывает пустой массив, или я не получаю отправленные значения правильно.Как отправить значения для submitformAction ().

Спасибо

Ответы [ 2 ]

5 голосов
/ 11 июня 2011

Я думаю, что вы должны использовать isValid() перед доступом к значениям отправленной формы, потому что это прямо там, что значения проверены и оценены

public function submitformAction() {

    $form = new Form_MyForm();
    $request = $this->getRequest();

      if ( $request->isPost() ) {
          if ($form->isValid( $request->getPost() )) {
              $values = $form->getValues();
              print_r($values);die();     
          } 
      } else {
           echo 'Invalid Form'; 
      }
}
2 голосов
/ 11 июня 2011

В дополнение к ответу @VAShhh.С некоторыми более подробными сведениями: вам нужно сделать две вещи, заполнить поля формы данными POST и применить к этим данным фильтры безопасности и валидаторы.Zend_Form предоставляет одну простую функцию, которая выполняет обе функции: isValid($data).

. Поэтому вы должны:

  1. создать свою форму
  2. проверить, что вы находитесь в POST-запросе
  3. заполнить и отфильтровать и проверить эти данные
  4. либо обработать тот факт, что может быть недействительным, и повторно показать форму, которая теперь украшена ошибками ИЛИ получить действительные данные изform

Таким образом, вы должны получить:

function submitformAction() {
    $form = new Form_MyForm();
    $request = $this->getRequest();

    if ( $request->isPost() ) {
        if (!$form->isValid($request->getPost())) {
            $this->view->form = $form;
            // here maybe you could connect to the same view script as your first action
            // another solution is to use only one action for showform & submitform actions
            // and detect the fact it's not a post to do the showform part
        } else {
            // values are secure if filters are on each form element
            // and they are valid if all validators are set
            $securizedvalues = $form->getValues();
            // temporary debug
            print_r($securizedvalues);die();
            // here the nice thing to do at the end, after the job is quite
            // certainly a REDIRECT with a code 303 (Redirect after POSt)      
            $redirector = $this->_helper->getHelper('Redirector');
            $redirector->setCode(303)
              ->setExit(true)
              ->setGotoSimple('newaction','acontroller','amodule');
            $redirector->redirectAndExit();
    } else {
           throw new Zend_Exception('Invalid Method'); 
    }
}

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

  • построение формы
  • , показывающее ее в виде в случае ошибок

Путем обнаружения запросаэто POST, который вы можете обнаружить в случае обработки POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...