ZendFramework Form: Изменить выбор для ввода типа текста, если проверка не удалась - PullRequest
1 голос
/ 22 ноября 2011

РЕДАКТИРОВАТЬ: Хорошо, я сократил это до минимума.

Приведенный ниже код показывает, как я могу настроить то, что я пытаюсь выполнить, в прямом html / php.

Если форма была отправлена ​​и проверка полей не пройдена, появляется текстовое поле, в противном случае, если форма НЕ была отправлена, предлагается раскрывающийся список.

HTML / PHP:

<form method="post" action="">
  <div class="state">
      <?php
          if(!$_POST['submit']){
              // show the select list of states.
              echo '<select name="state">
                      <option>list of all states</option>
                    </select>';
          }else{
              // show text input box
              echo '<input type="text" value="'.$_POST['select'].'" name="state" />';
          }
      ?>
  </div>
  <input type="submit" name="submit" value="submit" />

Но я понятия не имею, как бы я настроил это с помощью класса форм ZendFramework или как подключиться к нему, чтобы даже начать это делать.

1 Ответ

4 голосов
/ 23 ноября 2011

Вы на самом деле не должны делать такого рода вещи (я имею в виду писать текстовые формы), если вы используете Zend Framework.Вы должны использовать встроенные методы.

Прежде всего, включите форму и создайте форму.Затем используйте этот очень простой для понимания код.Обратите внимание, что я не пробовал, если он работает на 100%, но это на 100% логика, которая вам нужна.

Класс формы

class Application_Form_YourFormName extends Zend_Form
{
   public function init()
   {

      $this->setMethod(self::METHOD_POST);
      $this->setAction('THE-URL-WHERE-THIS-FORM-IS-MANAGED');

      $Element = new Zend_Form_Element_Text('state');
      $Element->setLabel('State:');
      $Element->addValidators(array(/*DON'T KNOW WHAT KIND OF VALIDATION YOU NEED*/));
      $Element->addFilters(array(new Zend_Filter_StringTrim(),
          new Zend_Filter_HtmlEntities(array('quotestyle' => ENT_QUOTES))));
      $Element->setRequired();
      $this->addElement($Element);
      unset($Element);

      $this->addElement('reset', 'Reset');
      $this->addElement('submit', 'Submit');
   }

   public function stateNotPresent()
   {
      $this->removeElement('state');

      // Note that getStates() is an hypotetical method of an
      // hypotetical Application_Model_State where you can retrieve an
      // array containing the list of the state you have. This array is
      // needed to fill the Select list.
      $States = Application_Model_State::getStates();
      $Element = new Zend_Form_Element_Select('statelist');
      $Element->setLabel('State:');
      $Element->setMultiOptions($States);
      $Element->addValidator(new Zend_Validate_InArray($States));
      $Element->setRequired();
      $Element->setOrder($this->count() - 2);
      $this->addElement($Element);
      unset($Element);
   }

}

Класс контроллера

public function name-of-the-action-you-needAction()
{
   $Form = new Application_Form_YourFormName();
   if ($this->_request->isPost())
   {
      if ($Form->isValid($this->_request->getPost()))
      {
         // Do things. A good text has been entered
      }
      else
      {
         $Form->stateNotPresent();
         if ($Form->isValid($this->_request->getPost()))
         {
            // Do things. A good selection has been entered.
         }
         else
         {
            // echo the edited form (the one with the dropdown list)
            $this->view->Form = $Form;
         }      
      }
   }
   // The first time the page is requested.
   // The page with the text box will be printed
   else
      $this->view->Form = $Form;
}

VIEW-OF-ACTION.phtml

if ($this->Form != null)
   echo $this->Form;

Я надеюсь, вы оцените мои усилия, чтобы вы поняли.

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